如何将argparse参数传递给另一个未更改的python程序?

时间:2015-04-27 10:09:36

标签: python

我正在编写一个脚本,在该脚本下将运行一些子程序。 例如 test.py 是主程序,在 test1.py test2.py test3.pl 将运行,我需要将主程序(test.py)中的参数传递给test1.py和test2.py程序。参数应保持不变。而转到另一个程序。

代码: test.py

import argparse
import subprocess
import os

commandLineArgumentParser = argparse.ArgumentParser()
commandLineArgumentParser.add_argument("-fname", "--fname",help="first name")
commandLineArgumentParser.add_argument("-lname","--lname", help="last name")
commandLineArgumentParser.add_argument("-age","--age", help="age")
commandLineArguments = commandLineArgumentParser.parse_args()

fname = commandLineArguments.fname
lname = commandLineArguments.lname
age = commandLineArguments.age

print "%s%s%s" %(fname,lname,age)

我正在通过波纹管命令运行程序:

python test.py -fname=abc -age=22 -lname='test a'
or 
python test.py -fname="abc test" lname='val' -age=30
or
python test.py -age=45 -lname='abc aa' fname="abc"
or 
python test.py -age=45 -lname="test"

现在我想在未更改的条件下获取参数部分并输入一个变量然后我们可以轻松地将参数传递给程序。

对于第一个命令,变量将保持

-fname=abc -age=22 -lname='test a'
第二个命令

-fname="abc test" lname='val' -age=30

我试图使用波纹管代码来获取参数,但脚本缺少配额。

my_argu=''
if len(sys.argv) >1:
    for x in sys.argv:
            if x == sys.argv[0]:
                    continue
            if x == sys.argv[len(sys.argv)-1]:
                    my_argu =my_argu+x
            else:
                    my_argu = my_argu+x+' '
print "%s" %(my_argu)

用于

python test.py -fname="abc test" lname='val' -age=30

输出是:

abc testval30

-fname=abc test lname=val -age=30

你可以看到缺少配额。所以我需要帮助来解决它

2 个答案:

答案 0 :(得分:0)

似乎你应该在一个包装器中将它们全部拉到一起然后调用它。

# wrapper.py

import test, test1, test2, test3
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-fname", "--fname",help="first name")
parser.add_argument("-lname","--lname", help="last name")
parser.add_argument("-age","--age", help="age")
cli_args = parser.parse_args()

test.run(cli_args)
test1.run(cli_args)
test2.run(cli_args)
test3.run(cli_args)

然后在每个testN.py s ...

# test.py

def run(cli_args):
    print("Your name is {} {}".format(cli_args.fname, cli_args.lname))
    # or whatever your program does....

然后做:

$ python wrapper.py --fname Adam --lname Smith

答案 1 :(得分:-2)

import sys
print (' '.join (sys.argv))