python子进程没有终止
为了在一组文件上执行各种工具,我使用以下命令类来调用它们python子进程没有终止,python,subprocess,termination,Python,Subprocess,Termination,为了在一组文件上执行各种工具,我使用以下命令类来调用它们 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, log
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个多小时)
self.process = subprocess.Popen(self.cmd, shell=True, stdout=logfile)
这里的解决方案:所以我用链接中的解决方案替换self.process.kill()。我有一个非常类似的问题(也使用shell=True的subprocess),但我想做的是简单地等待,直到进程(ping cmd with--count标志)自行终止-也就是说,我无法发送kill()信号。对如何获得该信息有何建议?谢谢!!