我试图使用子进程从日志文件中提取行。这里的目的是在执行一些程序时提取日志并等待一段时间将所有日志复制到另一个文件。
#!/bin/python
import threading
import time, subprocess
class GetLogs(threading.Thread):
'''
Get the developer logs
'''
def __init__(self):
'''
init
'''
self.stop = False
threading.Thread.__init__(self)
print "Initialised thread"
def run(self):
'''
Collect the logs from devlog
'''
command = "tail -f /var/log/developer_log | tee /tmp/log_collected"
response = subprocess.check_output(command.split(), shell=True)
print "Subprocess called"+str(response)
while ( self.stop is False ):
time.sleep(1)
print "Continuing"
continue
print "Finished the log file"
gl = GetLogs()
gl.start()
##Do some activity here
print "Sleeping for 10 sec"
time.sleep(10)
gl.strop = True
print "Done"
这不起作用 - 程序卡住了。
答案 0 :(得分:1)
subprocess.check_output()等待 all 输出。它等待子进程退出或关闭其STDOUT流。
tail -f
永不退出,永不关闭其STDOUT流。因此,check_output()调用下面的代码行都不会执行。
正如https://docs.python.org/2/library/subprocess.html中关于死锁的警告所示,请查看使用Popen()并传达()代替。