Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python子进程没有终止_Python_Subprocess_Termination - Fatal编程技术网

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个多小时)

问题是您正在使用shell=True打开进程

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

这里的解决方案:

所以我用链接中的解决方案替换self.process.kill()。我有一个非常类似的问题(也使用shell=True的subprocess),但我想做的是简单地等待,直到进程(ping cmd with--count标志)自行终止-也就是说,我无法发送kill()信号。对如何获得该信息有何建议?谢谢!!