2017-09-29 13 views
0

파일 집합에서 다양한 도구를 실행하려면 다음 명령 클래스를 사용하여 파일을 호출합니다.파이썬 하위 프로세스가 종료되지 않습니다.

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 

내가 직면 문제는 다음과 같습니다

내가 실행 도구/명령은 파이썬 프로그램이 긴 (3+ 시간)를 실행 특히, 제대로 종료하지 않는 것이
  • .

답변

0

문제는

self.process = subprocess.Popen(self.cmd, shell=True, stdout=logfile) 

솔루션 여기 = 당신이 쉘 프로세스를 개방하고 있다는 사실이다 How to terminate a python subprocess launched with shell=True

+0

그래서 나는 당신의 링크에서 솔루션 self.process.kill()를 교체 그렇 겠지. – Derping