Python subprocess:如何检索标准输出

12 浏览
0 Comments

Python subprocess:如何检索标准输出

所以,我正在编写一个Python脚本,需要调用另一个Python脚本,该脚本在标准输出中打印多条信息。我想将被调用的脚本的输出存储在一个列表中,并在主脚本中进行处理。

一种简单的方法是将结果打印到文件(file3)中,然后读取文件,就像这样:

subprocess.call("./vecdiff.py file1 file2 > file3")
f = open("file3", "r")

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

admin 更改状态以发布 2023年5月20日
0
0 Comments

在下面的代码中,将您的子进程的 stdout 和 stderr 重定向到 PIPE 中,然后您可以使用 \'communicate()\' 方法从 PIPE 中获取您的子进程的 stdout 和 stderr。\'PIPE\' 是父进程和子进程之间的管道。

from subprocess import Popen, PIPE
p = Popen("./vecdiff.py file1 file2", stdout=PIPE, stderr=PIPE)
output, errput = p.communicate()

0
0 Comments

最简单的方法是调用subprocess.check_output来调用进程并返回其输出结果(或在非零返回代码时引发异常,但仍然可以通过异常对象访问输出结果)。它可以轻松处理STDOUTSTDERR(默认情况下仅处理STDOUT)。

手册中的示例:

>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'

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

0