选择python popen process.kill()或process.terminate()的更优雅的方法

选择python popen process.kill()或process.terminate()的更优雅的方法,python,subprocess,popen,kill,terminate,Python,Subprocess,Popen,Kill,Terminate,我有一个小函数,用于终止或终止子进程及其子进程 我试图用一种更优雅的方式来写它,而不是重复两次if,else def kill_process(cls, process, kill_type): process = psutil.Process(process.pid) for proc in process.children(recursive=True): if kill_type== 'terminate': proc.term

我有一个小函数,用于终止或终止子进程及其子进程

我试图用一种更优雅的方式来写它,而不是重复两次if,else

def kill_process(cls, process, kill_type):
    process = psutil.Process(process.pid)

    for proc in process.children(recursive=True):

        if kill_type== 'terminate':

            proc.terminate()

        else:

            proc.kill()


    if kill_type== 'terminate':

        process.terminate()

    else:

        process.kill()

如果目标是不让If/else语句出现两次,则可以使用helper方法:

def kill_or_terminate(proc, kill_type):
     if kill_type == 'terminate':
            proc.terminate()
        else:
            proc.kill()

def kill_process(cls, process, kill_type):
    process = psutil.Process(process.pid)

    for proc in process.children(recursive=True):
        kill_or_terminate(proc, kill_type)

    kill_or_terminate(process, kill_type)
或者将父进程添加到子进程列表的末尾,以便所有进程都位于单个iterable中:

def kill_process(cls, process, kill_type):
    process = psutil.Process(process.pid)
    for proc in process.children(recursive=True) + [process]:
        if kill_type == 'terminate':
            proc.terminate()
        else:
            proc.kill()

为什么不尝试终止,稍等一下,然后杀死呢?一个简单的助手方法似乎可以达到目的,不是吗
def kill_或_terminate(process,kill_type):
我认为OP想先尝试很好地结束这个过程,然后如果它没有响应,就杀死它。@Jean-Françoisfare我实际上根本没有从这个问题中得到那种印象……也许OP可以澄清。我运行tcpdump,如果我运行process.kill(),我就会丢失捕获的数据包,接收或丢弃的信息。这就是为什么我需要process.terminate()。如果我运行ffmpeg,我需要process.kill(),否则python无法结束它。这就是为什么我需要两者,这取决于我是想杀死ffmpeg还是终止tcpdump。我已经尝试了第二个示例,它正是我想要的:)。我刚刚添加了proc.wait()