从 subprocess.Popen 将参数传递给 argparse

Posted

技术标签:

【中文标题】从 subprocess.Popen 将参数传递给 argparse【英文标题】:Passing arguments to argparse from subprocess.Popen 【发布时间】:2016-09-08 10:49:10 【问题描述】:

我正在尝试使用 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

现在,我使用 subprocess 调用上述脚本,如下所示: 脚本B:

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)

这很有效,在这种情况下,我可以从 ScriptA 访问参数。 关于第一种情况下可能出现什么问题的任何指示?我是 python 的新手,所以任何形式的帮助都将不胜感激

【问题讨论】:

【参考方案1】:

要么将命令作为字符串传递,就像你在命令行上看到的那样,或者如果你使用列表,然后在参数周围放置空格字符

from subprocess import check_output

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

如果你留下空格;它们用双引号括起来。 print sys.argv 在脚本中,看看它到底得到了什么参数。

【讨论】:

谢谢!我错过了这个。删除空格后它起作用了。【参考方案2】:

您可以使用子进程库从另一个脚本调用 python 脚本...

import subprocess

new_price=550
old_price=400

p = subprocess.call(
    ['python.exe','missing_prices.py','--new_prices',new_price,'-- 
     old_prices',old_price,],)

通过这种方式你可以做到这一点,我将这个参数传递给 argparse。

【讨论】:

以上是关于从 subprocess.Popen 将参数传递给 argparse的主要内容,如果未能解决你的问题,请参考以下文章

Python subprocess.Popen() 不传输 ® 符号,而是将文字字母 'r' 作为参数转换为批处理文件

将变量传递给 Subprocess.Popen

将标准输出从 subprocess.Popen 保存到文件,并将更多内容写入文件

subprocess.Popen 需要帮助

将python中的双引号shell命令传递给subprocess.Popen()?

为啥 subprocess.Popen 参数长度限制小于操作系统报告的长度?