[英]How to repeatedly pass arguments to a python file
我有一个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内存
我建议从shell调用时将文件位置(例如'names.txt'
)作为参数传递给python脚本。 然后在python脚本中,导入名称并逐个使用它们。
对于第二个问题,如果将script.py的逻辑包装在一个函数(例如,名为script_function
)中,该函数采用参数name
,并为'names.txt'
每个name
调用script_function(name)
,则应该保持内存使用率。 原因是在script_function
创建的所有变量都是该函数调用的本地变量,并在下一个函数调用中删除/替换以使用下一个名称。
另一种选择是awk内置的系统功能,所以:
awk '{ system("python script.py -n "$0) }' filename
尝试:
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。 它可能不是预期的行为,所以值得一提。
考虑到您有一个名称列表,您可以在shell脚本中执行以下操作
list="name1 name2 name 3 ... name1000"
for i in $list; do
python script.py -n $i
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.