【问题标题】:Getting output from a Python script subprocess从 Python 脚本子进程获取输出
【发布时间】:2015-01-21 14:25:36
【问题描述】:

这可能是一个愚蠢的问题,但我有一个 Python 脚本,它启动一个子进程(也是一个 Python 脚本),我需要该子进程返回三个整数。如何从启动子进程的 Python 脚本中获取这些返回值?我是否必须将整数输出到标准输出,然后使用 check_output() 函数?

【问题讨论】:

  • 干杯,我知道如何从子流程中获取输出 - 您链接到的答案很好,或者我可以使用 subprocess.check_output()。就从作为子进程运行的 python 脚本传回输出而言,将返回值写入 stdout() 并以这种方式取回它们是常见的做法吗?
  • 如果您要分叉 python 作业,那么多进程模块可能更适合? (尤其是像 multiprocessing.Pool.map 这样的 Pool 函数)

标签: python subprocess return-value


【解决方案1】:

答案是是的...我想要我的 +15 声望!! :-D

不,说真的……一旦你开始处理子进程,你真正必须与它们通信的唯一方法是通过文件(这就是stdoutstderr 等等)

所以你要做的就是获取输出并检查发生了什么(可能还有生成的进程'exit_code,如果一切顺利,这将是零)请记住stdout 的内容(使用check_output 函数可以得到)是一个字符串。因此,为了获得这三个项目,您必须以某种方式拆分该字符串...

例如:

import subprocess

output = subprocess.check_output(["echo", "1", "2", "3"])
print "Output: %s" % output
int1, int2, int3 = output.split(' ')
print "%s, %s, %s" % (int1, int2, int3)

【讨论】:

  • 谢谢!哇,我认为可能有一种不那么直截了当、更“正确”的方法,但至少这很简单! (我会在允许的时候接受这个答案)
  • 那么我是否只有我的子进程 print() / sys.stdout.write() 它的 3 个返回值?
  • 是的,无论哪种方式(print 将在末尾输出一个换行符...stdout.write 不会)