python逐行读取子进程的输出代码
发布时间:2020-12-17 17:12:07 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import sys,os,socketimport datetimeimport fcntlimport subprocessfrom threading import Threaddef log_worker(stdout): ''' needs to be in a thr
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import sys,os,socket import datetime import fcntl import subprocess from threading import Thread def log_worker(stdout): ''' needs to be in a thread so we can read the stdout w/o blocking ''' username,hostname = os.environ.get('USER'),socket.gethostname() log_file = '/var/log/mysql-%s.log' % username log = open(log_file,'a') while True: output = non_block_read(stdout).strip() if output: ''' [Tue Oct 30 22:13:13 2012 [email?protected]]> ''' prompt = '[%(timestamp)s %(username)[email?protected]%(host)s]> n' % dict( timestamp=datetime.datetime.now().strftime('%a %b %d %H:%M:%S %Y'),username=username,host=hostname) print prompt + output log.write(prompt + output + 'n') log.close() def non_block_read(output): ''' even in a thread,a normal read with block until the buffer is full ''' 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 '' if __name__ == '__main__': sub_process = subprocess.Popen( ['sh','/root/test/dummy.sh'],stdin=sys.stdin,stdout=subprocess.PIPE,stderr=subprocess.PIPE) thread = Thread(target=log_worker,args=[sub_process.stdout]) thread.daemon = True thread.start() sub_process.wait() thread.join(timeout=1) 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |