python子进程未捕获标准输出

时间:2020-04-11 20:27:47

标签: python

我正在尝试使用子进程运行python应用程序时捕获所有输出。我已经使用subprocess.run和subprocess.Popen尝试了几种变体。运行,执行perl脚本的python应用程序,此输出被捕获。

import subprocess as sp

print("some data")
print("some data")

x = subprocess.run(['script.py', 'some', 'options'], stdout=sp.PIPE, stderr=sp.PIPE)

proc_out = sp.stdout
proc_err = sp.stderr

我还尝试将'> out 2>&1'添加到列表中,尝试使用capture_output = True,尝试重定向stdout / stderr。奇怪的是,我尝试捕获的打印语句不再显示。

因此,这是一个python应用程序(捕获了输出),它使用子进程来调用另一个python应用程序(无法捕获其输出),而后者又调用了perl函数(捕获了输出)。

我遍历了引用捕获所有数据的大多数线程,但是仍然没有运气。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

import subprocess
command = "your command"
proc = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()

您需要.communicate(),该函数先写入输入,然后读取所有输出,然后等待子进程退出,然后再在当前/主线程中继续执行