在 Python 脚本中运行命令行参数

5

我有一个程序,可以通过命令行运行,如下所示:

python program.py 100 rfile

我该如何编写一个新的脚本,以便不仅可以使用'100'参数运行它,还可以连续使用参数列表,例如[50, 100, 150, 200]?

编辑:我之所以问这个问题,是因为我想记录'program.py'在不同参数下的执行情况。


你是想要多个参数,还是一个包含多个参数的Python列表? - Jon-Eric
添加了 [shell] 和 [shell-scripting] 标签;不确定这是否是 OP 所想要的,但至少对一些人来说似乎是最明显的方法。 - intuited
4个回答

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
如果你将1 2 3 4 5改为$@,则可以在运行脚本时传递数字列表,例如the_new_bash_script 1 2 3 4 5 - intuited
实际上,请将其更改为 "$@",这样您就可以运行 the_new_script 1 2 "3 4" 5 - glenn jackman

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

我猜您想要什么。如果我猜错了,请澄清一下。

我可能没有很好地解释我想做的事情。我不想修改我最初提到的“program.py”文件。我想创建一个新脚本,在一个参数列表上多次运行“program.py”脚本,每次使用一个参数。 - Chris
@Chris,使用Devrim的shell方法可能是最简单的。在其他Python文件中调用函数很容易,但如果program.py没有像“main函数”这样的东西,那就不太容易了。你知道我的意思吗?(你熟悉Python吗?) - Jon-Eric

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用作列表。

1
注意:自Python 2.7起,Optparse已被弃用并被几乎相同的argparse替代。 - notpeter

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所解释的那样。
如果您使用shell调用生成的脚本,则为:
python the_script.py filename 1 2 3 4 5 6

您最终将得到ns.file等于以读取方式打开的文件filenamens.numbers等于列表[1, 2, 3, 4, 5, 6]argparse非常棒,甚至可以在使用--help调用时为脚本及其选项打印出使用信息。您可以以太多的方式自定义它,这里无法解释,请阅读文档
从Python 2.7开始,argparse已经是标准库的一部分;对于早期版本的Python,它可以像普通模块一样安装,例如通过easy_install argparse,或者作为脚本所属包的依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接