首页 > 解决方案 > 子进程调用函数

问题描述

我想使用 subprocess来调用 somme 命令,这是启动和停止子进程的示例:

import subprocess  
# Start
proc = subprocess.Popen(command)  
# Stop
proc.terminate()

但是现在我正在尝试定义一个单独的函数来执行该过程,就像:

import os,sys
import subprocess
class Process:
    def __init__(self):
        self.proc = None
    def start(self,cmd):
        self.proc = subprocess.Popen(cmd, shell=True)

    def stop(self):
        self.proc.terminate()

if __name__ == '__main__':
    cmd = "XXXXX"
    p =Process()
    p.start(cmd)
    p.stop()

它可以工作并且启动进程启动但它仍然存在并且即使使用 pid 终止进程也无法调用停止函数。

有没有办法通过调用 stop 函数来停止进程?

标签: pythonsubprocesspopenterminate

解决方案


我认为您的问题是该变量proc是函数的本地变量start,因此它不存在于函数之外。您可以尝试像这样返回变量:

def start(cmd):
    return subprocess.Popen(cmd) 

def stop(proc):
    proc.terminate()

cmd= #your command
proc = start(cmd)
stop(proc)

推荐阅读