子進程命令的即時輸出
在 Python中,您可以捕捉子進程命令的輸出,並同時使用以下命令產生即時流輸出以下方法:
使用迭代器
import subprocess import sys p = subprocess.Popen(['command'], stdout=subprocess.PIPE) for line in iter(lambda: p.stdout.readline(1), ''): sys.stdout.buffer.write(line)
使用FileWriter 和FileReader
import io import time import subprocess import sys log = 'test.log' with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader: p = subprocess.Popen(['command'], stdout=writer) while p.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
原始程式碼重構
在您的原始程式碼,您可以在建立子流程後擷取即時輸出:如下:
ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() for line in iter(lambda: ret_val.stdout.readline(1), ''): if line: print(line) log_file.write(line.decode())
此方法可讓您捕捉stdout 和stderr流並列印即時輸出,同時將其寫入日誌檔案。
以上是如何從 Python 中的子進程命令取得即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!