Python subprocess.call阻塞

时间:2013-01-09 20:54:49

标签: python

我正在尝试使用subprocess.call在Python中运行外部应用程序。根据我的阅读,除非你调用Popen.wait,否则不应该阻止subprocess.call,但对我来说,它会阻塞,直到外部应用程序退出。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

你正在阅读错误的文档。据他们说:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

运行args描述的命令。等待命令完成,然后返回returncode属性。

答案 1 :(得分:-1)

subprocess中的代码实际上非常简单易读。只需查看3.32.7版本(视情况而定),您就可以知道它正在做什么。

例如,call看起来像这样:

def call(*popenargs, timeout=None, **kwargs):
    """Run command with arguments.  Wait for command to complete or
    timeout, then return the returncode attribute.

    The arguments are the same as for the Popen constructor.  Example:

    retcode = call(["ls", "-l"])
    """
    with Popen(*popenargs, **kwargs) as p:
        try:
            return p.wait(timeout=timeout)
        except:
            p.kill()
            p.wait()
            raise

你可以在不调用wait的情况下做同样的事情。创建Popen,不要在其上调用wait,这正是您想要的。