[英]How to capture output from continuous process in Python?
我是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命令,則永遠不會捕獲輸出。 這可能嗎?
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 doc上查看更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.