2017-09-29 99 views
0

要在一组文件上执行各种工具,我使用下面的Command类来调用它们。python子进程没有终止

import subprocess 
import threading 
import logging 
logger = logging.getLogger('root') 


class Command(object): 
    def __init__(self, cmd): 
     self.cmd = cmd 
     self.process = None 

    def run(self, timeout, logfile): 
     def target(): 
      logger.info('Thread started') 
      logger.info('Command: %s' % self.cmd) 
      if logfile is None: 
       self.process = subprocess.Popen(self.cmd, shell=True) 
      else: 
       logger.info('logging to file %s' % logfile.name) 
       self.process = subprocess.Popen(self.cmd, shell=True, stdout=logfile) 
      self.process.communicate() 
      logger.info('Thread finished') 
      self.process.kill() 
     thread = threading.Thread(target=target) 
     # make it a daemon 
     thread.daemon = True 
     thread.start() 
     thread.join(timeout) 
     if thread.is_alive(): 
      logger.warn('Terminating process') 
      thread.join() 
      self.process.kill() 
     logger.info('Thread Returncode: %d' % self.process.returncode) 
     return self.process.returncode 

我面临的问题是:

  • 这些工具/命令我跑不正常终止,特别是在Python程序运行长(3小时以上)。

回答