2016-07-22 94 views
0

我正在嘗試使用子進程從日誌文件中提取行。這裏的意圖是在某些程序正在執行時提取日誌,並等待一段時間將所有日誌複製到另一個文件。python爲什麼這個子進程命令不能按預期工作

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

你不能這樣等待子進程 – YOU

回答

1

subprocess.check_output()等待全部的輸出。它等待子進程退出或關閉其STDOUT流。

tail -f永不退出,永不關閉其STDOUT流。因此,調用check_output()之後的代碼行都不會執行。

由於關於https://docs.python.org/2/library/subprocess.html中的死鎖警告建議,請查看使用Popen()和communicate()來代替。

+0

非常感謝你的回覆。 – user2677279

+0

我試圖用Popen來做。仍然面臨相同/相似的問題是我的代碼 – user2677279

相關問題