python print end 堵塞问题以及如何非堵塞读取subprocess的所有输出做到实时读取
2021-05-29 16:01
标签:cep shel tput utf8 效果 div fcntl block style 如下代码: 本来想要的效果是每秒输出,但是发现这样写会等所有循环完毕后才会打印,发现需要使用flush参数来立即输出,正确代码如下: 如何实时读取subprocess的输出是一个困扰我很久的问题,最近终于得到了解决,之前是使用subprocess的readline(),但是如果那一行仍未运行完时还是会堵塞,无法做到真正的实时读取,多方调查发现配合fcntl库可以做到,方法如下: python print end 堵塞问题以及如何非堵塞读取subprocess的所有输出做到实时读取 标签:cep shel tput utf8 效果 div fcntl block style 原文地址:https://www.cnblogs.com/CYHISTW/p/14767863.htmlpython print end
for i in range(5):
time.sleep(1)
print(i, end=‘‘)
for i in range(5):
time.sleep(1)
print(i, end=‘‘, flush=True)
实时读取subprocess的输出
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
def non_block_read(output): # 避免阻塞
fd = output.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
try:
return output.read()
except:
return ""
out = non_block_read(p.stdout)
if out != None:
outstr = out.decode(‘utf8‘)
print(outstr, end=‘‘, flush=True)
上一篇:字典根据key或者value排序
下一篇:spring 装配
文章标题:python print end 堵塞问题以及如何非堵塞读取subprocess的所有输出做到实时读取
文章链接:http://soscw.com/index.php/essay/89177.html