簡體   English   中英

如何從Python的連續過程中捕獲輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM