Python防止stdout.readline()凍結(jié)程序的方法有哪些?在我當(dāng)前的程序中,我使用子處理程序啟動(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'