要在一组文件上执行各种工具,我使用以下Command类来调用它们。
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
我面临的问题是:
答案 0 :(得分:0)
问题是你用shell = True
打开进程self.process = subprocess.Popen(self.cmd, shell=True, stdout=logfile)
此处的解决方案:How to terminate a python subprocess launched with shell=True