如何在不变的条件下将argparse参数传递给另一个python程序?

如何在不变的条件下将argparse参数传递给另一个python程序?,python,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() com

我正在编写一个脚本,在这个脚本下运行一些子程序。 例如,test.py是主程序,在该test1.py下,test2.pytest3.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

正如您所看到的,缺少配额。所以我需要帮助来解决这个问题

看起来你应该把这些都放在一个包装器中,然后调用它

import sys
print (' '.join (sys.argv))
# 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

看起来你应该把这些都放在一个包装袋里,取而代之的是它

# 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

您使用带和不带前导连字符的lname是错误的吗?“我正在考虑将参数传递给另一个python程序”-为什么?你不能导入相应的函数并直接调用它吗?我们需要完整的图片。这似乎是一个错误。无法获得不变的参数。参数由fill
sys.argv
全局变量解析。你可以试着模仿它,但你永远不会复制原始的(转义字符)。要在几乎所有情况下模拟它,您都可以只获取包含空格的参数,并引用它们。为什么不能直接执行,而不是通过命令行参数执行?为什么不干脆
import test1
,然后用解析后的参数调用函数呢?使用带和不带前导连字符的lname是错误的吗?“我正在考虑将参数传递给另一个python程序”-为什么?你不能导入相应的函数并直接调用它吗?我们需要完整的图片。这似乎是一个错误。无法获得不变的参数。参数由fill
sys.argv
全局变量解析。你可以试着模仿它,但你永远不会复制原始的(转义字符)。要在几乎所有情况下模拟它,您都可以只获取包含空格的参数,并引用它们。为什么不能直接执行,而不是通过命令行参数执行?为什么不直接
import test1
然后用解析后的参数调用函数呢?当参数包含空格时,这将不起作用。另外,您保留了
argv[0]
。当参数包含空格时,这将不起作用。另外,您保留了
argv[0]