我有一个python脚本,运行如下:
python script.py -n name
另外,我有一个文件(或说列表),其中包含所有name
值,如下所示:
name1
name2
name3
name4
...
...
name1000
所以,我想运行python脚本来传递所有这些名称作为参数。执行此任务的最愚蠢和最懒惰的方式是我创建了一个shell脚本(我编写了一个python脚本来生成此内容),如下所示run.sh
:
python script.py -n name1
python script.py -n name2
python script.py -n name3
python script.py -n name4
........
........
python script.py -n name1000
我将此shell脚本作为sh run.sh
运行。
我确信必须有一种更聪明/更优雅的方式来做到这一点。有小费吗?
此外,是否可以在每次执行后释放(清除)python内存
答案 0 :(得分:2)
我建议从shell调用时将文件位置(例如'names.txt'
)作为参数传递给python脚本。然后在python脚本中,导入名称并逐个使用它们。
对于第二个问题,如果你将script.py的逻辑包装在一个函数(例如名为script_function
)中,该函数使用参数name
,并为每个{{1}调用script_function(name)
在name
中,你应该记住你的记忆。原因是'names.txt'
中创建的所有变量都是该函数调用的本地变量,并在下一个函数调用中删除/替换以使用下一个名称。
答案 1 :(得分:1)
另一种选择是awk中的内置系统功能,所以:
awk '{ system("python script.py -n "$0) }' filename
答案 2 :(得分:0)
尝试:
cat <file_with_list_of_names_1_per_line> | xargs python script.py -n
应该这样做,如果不是......尝试在bash脚本中包装“python script.py -n”。简单的说,假设一个名为“call_my_script.sh”的脚本包含:
#!/bin/bash
python script.py -n $1
,然后你可以用:
来调用它cat <file_with_list_of_names_1_per_line> | xargs call_my_script.sh
# this will call/execute "call_my_script.sh name", for each name in the file, 1 at a time
您还可以使用“xargs”的“-P”选项,并行运行多个实例(注意对资源的连续访问,比如写入相同的输出文件或类似文件,可能会产生奇怪的结果)
.. | xargs -P <n> ...
并行运行脚本的“n”个实例
旁注:也是一个不熟悉“xargs”的重要方面,它会单独处理每个 单词 ,这意味着如果在一条线上会有是2(或更多)单词“word1 word2”...这将使它称为“脚本”2(或更多)次,每个单词1。它可能不是预期的行为,所以值得一提。
答案 3 :(得分:0)
考虑到您有一个名称列表,您可以在shell脚本中执行以下操作
list="name1 name2 name 3 ... name1000"
for i in $list; do
python script.py -n $i
done