我是Python和Linux的新手。我有一个在终端窗口中运行的进程,它将无限期地运行。停止它的唯一方法是崩溃或我按下ctrl + C。该过程将文本输出到我希望使用Python捕获的终端窗口,因此我可以对该文本进行一些其他处理。
我知道我需要采取一些措施来获得stdout,但是无论我如何尝试,我似乎都无法正确捕获stdout。这是我到目前为止所拥有的。
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),
当我的命令是简单的“ echo blah blah blah”时,这将起作用。我猜这是因为回声过程终止了。如果我尝试运行Continuous命令,则永远不会捕获输出。这可能吗?
答案 0 :(得分:2)
read()
将阻塞阅读,直到达到EOF为止,请改为使用read(1024)
或readline()
:
read(size = -1)
读取并返回最大字节数。如果省略该参数,无或为负,则读取数据并返回直到达到EOF。
例如:
p = subprocess.Popen('yes', stdout=subprocess.PIPE)
while True:
line = p.stdout.readline()
print(line.strip())
有关python io doc的更多信息。