Skip to main content
 首页 » 编程设计

python之如何在不变的情况下将 argparse 参数传递给另一个 python 程序

2025年05月04日10birdshome

我正在编写一个脚本,一些子程序将在该脚本下运行。 例如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 

如您所见,缺少配额。所以我需要帮助来解决它

请您参考如下方法:

似乎您应该将所有这些放在一个包装器中,然后调用它。

# 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 中......

# 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