我有一个从命令行运行的程序,如
python program.py 100 rfile
如何编写 new 脚本,以便不使用'100'参数运行它,我可以连续运行它,如[50,100,150,200]这样的参数列表]
编辑:我问的原因是我想记录'program.py'如何用不同的参数执行。
答案 0 :(得分:8)
如果你像这样创建一个bash文件
#!/bin/bash
for i in 1 2 3 4 5
do
python program.py $i rfile
done
然后对该文件执行chmod +x
,当您运行它时,它会连续运行:
python program.py 1 rfile
python program.py 2 rfile
python program.py 3 rfile
python program.py 4 rfile
python program.py 5 rfile
答案 1 :(得分:6)
您可以使用Devrim的shell方法,也可以修改脚本:
如果你的原始脚本是这样的:
import sys
do_something(sys.argv[1], sys.argv[2])
你可以像这样完成你想要的东西:
def main(args):
for arg in args[:-1]:
do_something(arg, args[-1])
if __name__ == '__main__':
import sys
main(sys.argv[1:])
您可以像这样调用它:
python program.py 50 100 150 200 rfile
我在猜你想要什么。请澄清这是否正确。
答案 2 :(得分:4)
您可以使用Optparse
它可让您使用以下程序:python yourcode.py --input input.txt --output output.txt
当你有许多控制台参数时,这很好。
因此,在您的情况下,您可以执行以下操作:
parser.add_option("-i","--input", action="store", type="int", nargs=4, dest="mylist")
现在,您可以在控制台中输入python program.py -i 50 100 150 200
要访问输入,您可以使用mylist作为列表。
答案 3 :(得分:2)
如果你想在python脚本中执行此操作,可以使用argparse
模块(未经测试的代码)安排它获取整数列表:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('rfile', type=argparse.FileType('r'))
parser.add_argument('numbers', nargs='+', type=int)
ns = parser.parse_args()
此类活动通常由Jon-Eric在main
函数explained的主持下进行。
如果使用
从shell调用生成的脚本python the_script.py filename 1 2 3 4 5 6
最终ns.file
等于文件filename
,为读取权限而打开,ns.numbers
等于列表[1, 2, 3, 4, 5, 6]
。
argparse
非常棒,甚至可以打印出脚本及其选项的使用信息(如果您使用--help
调用它)。您可以通过多种方式自定义此处进行解释,只需阅读docs。
argparse
位于标准库中;对于早期的蟒蛇,它可以以正常方式作为模块安装,例如通过easy_install argparse
,或者作为脚本所属的包的依赖项。