【问题标题】:Subprocess call function [closed]子流程调用函数[关闭]
【发布时间】:2021-02-25 07:51:07
【问题描述】:

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

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 杀死进程也无法调用停止函数。

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

【问题讨论】:

  • 你没有从start返回proc
  • 我在main中调用start函数
  • start 可以工作,但您无法终止proc,因为您没有将变量保存在任何地方。你将什么作为参数传递给stop
  • 在您发布的代码中没有class 或全局变量。请更新您的问题以包含您正在使用的代码。
  • 类方法需要self作为第一个参数,如果你想改变Process的属性,你可以使用self.proc。在这种情况下,stop 不需要 proc 作为参数。

标签: python subprocess popen terminate


【解决方案1】:

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

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

def stop(proc):
    proc.terminate()

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

【讨论】:

  • 这是我正在尝试做的事情..但是进程仍然存在..无法停止或杀死
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多