如何重复将参数传递给python文件

时间:2017-04-12 21:16:30

标签: python bash shell

我有一个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内存

4 个答案:

答案 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