python逐行读取子进程的输出代码
发布时间:2020-05-25 00:57:49 所属栏目:Python 来源:互联网
导读:python逐行读取子进程的输出代码
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 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 [emailprotected]]> '''
prompt = '[%(timestamp)s %(username)[emailprotected]%(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)
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
