通过subprocess.Popen运行脚本,返回值

时间:2016-06-22 13:34:05

标签: python subprocess

我有一个简单的脚本,其结构为:

if __name__ =='main':
    #do some logic
    #print to console the result

现在,我使用subprocess.Popen()方法通过代码运行脚本,如下所示:

p = subprocess.Popen(
  ["python", path_of_script_to_run] + arguments_list, 
  stdout=subprocess.PIPE,
  stderr=subprocess.PIPE)

我的问题是如何使用返回值或其他方法将正在运行的脚本中的值返回到调用脚本。

我不能在if __name__ =='main':的上下文中使用return 那么这是否意味着我无法将调用脚本中指定的返回值传递给p变量?
我也想尝试避免解析运行到控制台的脚本的打印..

2 个答案:

答案 0 :(得分:0)

您可以使用subprocess.check_output()

捕获调用脚本中的输出
from subprocess import check_output
result = check_output(args).decode()

要同时捕获结果中的标准错误,请使用stderr=subprocess.STDOUT

答案 1 :(得分:0)

使用communicate()检索脚本的输出。并returncode获取退出代码。

p = subprocess.Popen(
  ["python", path_of_script_to_run] + arguments_list, 
  stdout=subprocess.PIPE,
  stderr=subprocess.PIPE)

(stdoutdata, stderrdata) = p.communicate()
exit_code = p.returncode

要让您的其他脚本返回退出代码,您应该使用sys.exit(code)

import sys
if __name__ =='main':
    try:
        # do stuff
        sys.exit(0)
    except Exception as err:
        print(err)
        sys.exit(1)