python为什么这个子进程命令没有按预期工作

时间:2016-07-22 00:02:12

标签: python-2.7 subprocess

我试图使用子进程从日志文件中提取行。这里的目的是在执行一些程序时提取日志并等待一段时间将所有日志复制到另一个文件。

#!/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"

这不起作用 - 程序卡住了。

1 个答案:

答案 0 :(得分:1)

subprocess.check_output()等待 all 输出。它等待子进程退出或关闭其STDOUT流。

tail -f永不退出,永不关闭其STDOUT流。因此,check_output()调用下面的代码行都不会执行。

正如https://docs.python.org/2/library/subprocess.html中关于死锁的警告所示,请查看使用Popen()并传达()代替。