如何在不变的条件下将argparse参数传递给另一个python程序?
我正在编写一个脚本,在这个脚本下运行一些子程序。 例如,test.py是主程序,在该test1.py下,test2.py,test3.pl将运行,我需要将参数从主程序(test.py)传递到test1.py和test2.py程序。参数应处于不变的状态。在传递到另一个程序时 代码:test.py如何在不变的条件下将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
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程序”-为什么?你不能导入相应的函数并直接调用它吗?我们需要完整的图片。这似乎是一个错误。无法获得不变的参数。参数由fillsys.argv
全局变量解析。你可以试着模仿它,但你永远不会复制原始的(转义字符)。要在几乎所有情况下模拟它,您都可以只获取包含空格的参数,并引用它们。为什么不能直接执行,而不是通过命令行参数执行?为什么不直接import test1
然后用解析后的参数调用函数呢?当参数包含空格时,这将不起作用。另外,您保留了argv[0]
。当参数包含空格时,这将不起作用。另外,您保留了argv[0]
。