如何在 Python 中捕获连续过程的输出?



我是Python和Linux的新手。我有一个在终端窗口中运行的进程,该进程将无限期运行。阻止它的唯一方法是让它崩溃或让我按 ctrl+C。此过程将文本输出到我希望用 Python 捕获的终端窗口,因此我可以对该文本进行一些额外的处理。

我知道我需要做点什么来获取标准输出,但无论我尝试什么,我似乎都无法正确捕获标准输出。这是我到目前为止所拥有的。

import subprocess
command = 'echo this is a test. Does it come out as a single line?'
def myrun(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout = []
while True:
line = p.stdout.read()
stdout.append(line)
if line == '' and p.poll() != None:
break
return ''.join(stdout)
result = myrun(command)
print('> ' + result),

当我的命令是一个简单的"回声等等等等"时,这将起作用。我猜这是因为回声过程终止。如果我尝试运行连续命令,则永远不会捕获输出。这可能做到吗?

read()将阻止读取,直到达到EOF,请改用read(1024)readline()

读取(大小=-1(

读取并返回最大大小的字节。如果省略参数、无或负数,则读取并返回数据,直到达到 EOF。

例如:

p = subprocess.Popen('yes', stdout=subprocess.PIPE)
while True:
line = p.stdout.readline()
print(line.strip())

在 Python IO 文档中查看更多信息。

最新更新