Python子进程调用挂起?

时间:2014-07-01 15:32:04

标签: python

Python中的子进程调用是否挂起?也就是说,子进程调用是否与Python代码的其余部分在同一个线程中运行,还是非阻塞模型?我无法在文档中找到任何内容或在此问题上找到任何内容。谢谢!

2 个答案:

答案 0 :(得分:3)

subprocess模块中的大多数方法都是阻塞的,这意味着他们希望在返回之前完成子进程。但是,subprocess.Popen是非阻止的。

result = subprocess.call(cmd) # This will block until cmd is complete
p = subprocess.Popen(cmd) # This will return a Popen object right away

获得Popen对象后,可以使用poll实例方法查看子进程是否完整而不会阻塞。

if p.poll() is None: # Make sure you check against None, since it could return 0 when the process is complete.
    print "Process is still running"

答案 1 :(得分:2)

子进程在后台运行。在子进程模块中,有一个名为Popen的类在后台启动进程。它有一个wait()方法,您可以使用它等待进程完成。它还有一个communic()辅助方法,它将处理stdin / stdout / stderr以及等待进程完成。它还有一些方便的函数,比如call()和check_call(),它们创建一个Popen对象,然后等待它完成。

因此,subprocess实现了非阻塞模型,但也为您提供了阻塞辅助函数。