【问题标题】:Can subprocess.call be invoked without waiting for process to finish?可以在不等待流程完成的情况下调用 subprocess.call 吗?
【发布时间】:2012-06-13 12:32:28
【问题描述】:

我目前正在使用 subprocess.call() 来调用另一个程序,但它会阻塞执行线程,直到该程序完成。有没有办法直接启动该程序而无需等待返回?

【问题讨论】:

标签: python


【解决方案1】:

使用subprocess.Popen 代替subprocess.call

process = subprocess.Popen(['foo', '-b', 'bar'])

subprocess.callsubprocess.Popen 的包装器,它调用communicate 来等待进程终止。另见What is the difference between subprocess.popen and subprocess.run

【讨论】:

  • 这个答案应该是“否”吗?这个答案并不能真正回答问题,因为有时您不能简单地将subprocess.call 替换为subprocess.popen
  • @anion:正确,答案是否定的,因为call的意义在于等待进程终止。
【解决方案2】:

答案不应该是使用'close_fds'标志吗?

subprocess.Popen(cmd, stdout=None, stderr=None, stdin=None, close_fds=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多