python:如何以非阻塞的方式读

如题所述

第1个回答  2018-07-16
代码是这样的:
subp = subprocess.Popen(["d:/T1.exe"], shell=True, stdout=subprocess.PIPE, bufsize=0)
subp.stdout.read()

但是发现read和readline函数是阻塞方式调用的,一定要subprocess运行结束才能返回数据。本回答被网友采纳
第2个回答  2018-07-23


Popen返回stdout,是正常的输出文件描述符,可以设置文件描述符为非阻塞方式:

import fcntl    

import os    

from subprocess import *    

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 ""    

subp = subprocess.Popen(["d:/T1.exe"], shell=True, stdout=subprocess.PIPE, bufsize=0)

return_str = non_block_read(subp.stdout)


相似回答