App下載

Python防止stdout.readline()凍結(jié)程序的方法有哪些?

猿友 2021-07-26 15:42:00 瀏覽數(shù) (3285)
反饋

Python防止stdout.readline()凍結(jié)程序的方法有哪些?在我當(dāng)前的程序中,我使用子處理程序啟動服務(wù)器。?Popen()? 和繼續(xù)閱讀從粗壯使用 ?readline()?。但是,當(dāng)它卡在讀線上,直到出現(xiàn)新行。這是不好的,因?yàn)槲倚枰軌驁?zhí)行其他代碼,而等待服務(wù)器輸出。有什么辦法可以阻止這種情況發(fā)生嗎?

import subprocess

server = subprocess.Popen("startup command", stdout= subprocess.PIPE, encoding= "utf-8")

while True:
    out = server.stdout.readline()
    if out != "":
        print(out)
    print("checked for line")

我寧愿避免多線程,因?yàn)槲业拇a的不同部分將不再是線程安全。

解決方法:

使用?poll()?和?communicate()?代替:

import subprocess
import time

with subprocess.Popen(['bash', '-c', 'sleep 1 && echo OK'], stdout=subprocess.PIPE) as proc:
    while proc.poll() is None:
        print('<doing something useful>')
        time.sleep(0.3)
    out, err = proc.communicate()
    print(out)
<doing something useful>
<doing something useful>
<doing something useful>
<doing something useful>
b'OK\n'


0 人點(diǎn)贊