从subprocess.Popen传递参数到argparse

时间:2016-05-12 14:17:48

标签: python-3.x subprocess python-2.x os.system

我试图使用python 3中的subprocess.Popen功能从另一个脚本(scriptB)中使用python 2(比如scriptA)调用脚本

我想调用的脚本实现了一个argparse方法,它需要两个如下所示的参数: ScriptA(需要python 2):

def get_argument_parser():
'''
'''
import argparse

parser = argparse.ArgumentParser("Get the args") 

parser.add_argument("-arg1", "--arg1",required = True,
                    help = "First Argument")

parser.add_argument("-arg2", "--arg2",required = True,
                    help = "Second Argument")

return parser

现在,我使用子进程调用上面的脚本,如下所示: ScriptB:

value1 = "Some value"
value2 = "Some other value"
subprocess.Popen(["C:\\Python27\\python.exe ", ScriptAPATH, " -arg1 " , value1, " -arg2 ", value2],shell = True, stdout = subprocess.PIPE)

但是,我收到的错误是: 错误:参数-arg1 / - 需要arg1

接下来我尝试用os.system替换subprocess.Popen,如下所示:

cmd = "C:\\Python27\\python.exe scriptA.py" + " -arg1 " + value1 + " -arg2 " + value2
os.system(cmd)

这适用于fins,在这种情况下我可以访问ScriptA中的参数。 关于第一种情况可能出现什么问题的任何指示?我是python的新手,所以任何形式的帮助都会受到赞赏

1 个答案:

答案 0 :(得分:1)

将命令作为字符串完全按照您在命令行中看到的那样传递,或者如果使用列表,则在参数周围删除空格字符

from subprocess import check_output

output = check_output([r"C:\Python27\python.exe", script_path,
                       "-arg1" , value1, "-arg2", value2])

如果你留空间;它们用双引号括起来。脚本中的print sys.argv,以确切了解它得到的参数。