首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python子流程:如何检索标准输出

Python子流程:如何检索标准输出
EN

Stack Overflow用户
提问于 2013-03-29 23:56:53
回答 4查看 421关注 0票数 1

因此,我正在编写一个python脚本,其中需要调用另一个在标准输出中打印几行的python脚本。我希望将被调用者脚本的输出存储在一个列表中,并在主脚本中处理它们。

一种简单的方法是将结果打印到一个文件(file3)中,然后读取该文件,如下所示

代码语言:javascript
复制
subprocess.call("./vecdiff.py file1 file2 > file3")

f = open("file3", "r")

如何将输出直接重定向到我的主脚本中的一些列表中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-30 00:22:48

如下所示,将您的子进程的stdout和stderr重定向到管道,然后您可以使用'communicate()‘方法从管道中获取您的子进程的stdout和stderr。“管道”是父进程和子进程之间的管道。

代码语言:javascript
复制
from subprocess import Popen, PIPE
p = Popen("./vecdiff.py file1 file2", stdout=PIPE, stderr=PIPE)
output, errput = p.communicate()
票数 2
EN

Stack Overflow用户

发布于 2013-03-30 00:24:13

最简单的方法是调用subprocess.check_output,它调用流程并返回其输出(或者在非零返回代码时引发异常,但您仍然可以通过exception对象访问输出)。它可以很容易地处理STDOUTSTDERR (虽然默认情况下只能处理STDOUT )。

手册中的示例:

代码语言:javascript
复制
>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'

如果您的进程正在生成大量数据,并且您希望在运行时对其进行处理,则必须打开管道并使用communicate,如其他答案中所述。

票数 3
EN

Stack Overflow用户

发布于 2013-03-30 00:03:04

如果使用subprocess.Popen(),则可以使用communicate()保存输出。例如:

代码语言:javascript
复制
proc = subprocess.Popen("./vecdiff.py file1 file2", stdout=subprocess.PIPE)
output = proc.communicate()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15706733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档