Python异步读取子进程输出,python异步进程,python的subpr


python的subprocess可以获得子进程的stdout,但是是阻塞的,要想实时获得子进程的输出还需要额外做一些处理,请看下面的实例代码:

#!/usr/bin/python2import timeimport sys, osimport subprocessimport fcntlimport selectproc = subprocess.Popen(['tail','-f','/byrx.net/webserver/logs/access.log'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)def nonblocking(fd):    fl = fcntl.fcntl(fd, fcntl.F_GETFL)    fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)nonblocking(proc.stdout)if __name__ == '__main__':    try:        while proc.poll() == None:            readx = select.select([proc.stdout.fileno()], [], [])[0]            if readx:                chunk = proc.stdout.read()                sys.stdout.write(chunk)            time.sleep(.1)    except Exception,ex:        print ex        pass

评论关闭