2010-10-15 240 views
3

我有一个是在命令行中运行这样运行命令行参数

python program.py 100 rfile 

程序如何可以写一个脚本,而不是只用“100运行它'的论点,我可以连续运行它的参数列表[50,100,150,200]?

编辑:我问的原因是我想记录'program.py'如何用不同的参数执行。

+0

你想多个参数或单个参数是一个Python列表? – 2010-10-15 03:06:28

+0

添加了[shell]和[shell-scripting]标签;不知道这是OP的想法,但它似乎是对至少一些人最明显的方法。 – intuited 2010-10-15 03:37:14

回答

7

如果你创建一个这样

#!/bin/bash 
for i in 1 2 3 4 5 
do 
    python program.py $i rfile 
done 

然后在该文件上做chmod +x一个bash文件,当你运行它,它会连续运行这些:

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 2010-10-15 03:47:03

+0

实际上,将其更改为'“$ @”',以便您可以执行'the_new_script 1 2'3 4“5' – 2010-10-15 23:29:22

6

您可以使用Devrim的壳的方法,也可以修改你的脚本:如果你的原始脚本像这样工作

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 

我在猜你想要什么。请澄清,如果这是不正确的。

+0

我可能没有解释我想做得很好。我不想修改我最初提到的'program.py'文件。我想创建一个新的脚本,它在参数列表中多次运行'program.py'脚本,每次使用一个参数。 – Chris 2010-10-15 03:24:55

+0

@Chris,它可能是最容易使用Devrim的shell方法。在其他python文件中调用函数很容易,但是如果program.py没有像“main function”那样的东西,那就不那么容易了。你懂我的意思吗? (您是否熟悉Python?) – 2010-10-15 03:36:19

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已被弃用,并由几乎相同的参数替换。 – notpeter 2014-02-24 00:41:39

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的主持下进行。

如果调用从外壳采用

python the_script.py filename 1 2 3 4 5 6 

生成的脚本,你将最终ns.file等于文件filename,打开读取访问,并ns.numbers等于列表[1, 2, 3, 4, 5, 6]

​​是完全真棒,甚至打印出脚本和它的选项的使用信息,如果你打电话给--help。你可以用太多的方式来定制它,只需阅读docs即可。

​​是Python 2.7以上的标准库;对于较早的蟒蛇,它可以以正常方式作为模块安装,例如,通过easy_install argparse,或通过作为您的脚本所属的包的依赖。