Python防止stdout.readline()冻结程序的方法有哪些?
2021-07-26 15:42:00
浏览数 (3172)
Python防止stdout.readline()冻结程序的方法有哪些?在我当前的程序中,我使用子处理程序启动服务器。Popen()
和继续阅读从粗壮使用 readline()
。但是,当它卡在读线上,直到出现新行。这是不好的,因为我需要能够执行其他代码,而等待服务器输出。有什么办法可以阻止这种情况发生吗?
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")
我宁愿避免多线程,因为我的代码的不同部分将不再是线程安全。
解决方法:
使用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'