【问题标题】:defining a subprocess inside a function in python?在python中的函数内定义子进程?
【发布时间】:2018-08-05 09:24:37
【问题描述】:

下面的代码有问题。

    def play():
        process = "......"
        h=subprocess.Popen(process)

    def stop():
        h.terminate()

它说它不能这样做,因为 h 没有定义。这是因为它不是全球性的吗?如果是这样,我如何使它成为全球性的,以便它可以找到它。我曾尝试在程序开始时使用global 定义变量h,但它不起作用。

谢谢

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    这在函数play的范围内定义了一个名为h的变量:

    def play():
        process = "......"
        h=subprocess.Popen(process)
    

    函数stop范围内没有名为h的变量,因此失败:

    def stop():
        h.terminate()
    

    不知何故,h 必须发送到stop。我看到了两种方法。

    第一个选项,play 返回 h 并且 stop 接收 i 作为参数(如在 kabanus' answer 中)

    第二个选项,创建一个类:

    class Player:
        def __init__(self):
            self.process = None
    
        def play(self):
            assert self.process is None, "Already playing"
            self.process = subprocess.Popen("...")
    
        def stop(self):
            assert self.process is not None, "Not playing"
            self.process.terminate()
            self.process = None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多