2011-08-11 36 views
2

我被告知subprocess.Popen不会阻塞,所以进程在后台运行,并且您的python程序不会等到它完成。但是,这不是我想要的。启动一个进程并阻塞完成的最佳方式

我正在将我的程序调用到外部的python程序中,我无法控制它。它不返回任何返回码,只是运行,对文件进行操作并完成。我想调用这个函数,并且只在该调用完成时继续我的python程序。我该怎么做呢?

回答

1

最好的办法是使用communicate方法: http://docs.python.org/library/subprocess.html#subprocess.Popen.communicate

也有看wait方法,它指出了为什么大多数的时候你应该用沟通来代替: http://docs.python.org/library/subprocess.html#subprocess.Popen.wait

+0

大部分时间?只有我使用管道工作。如果我只是运行一个命令并想等待它,我不需要它。 – glglgl

+0

大多数情况下,因为不应忽视流程和管道的输出(在我看来)是处理它的最方便的方法。这导致使用“沟通”。 – tauran

+0

是和不是。通常情况是这样,但是如果一个进程输出(或期望)兆字节的数据,大部分情况下最好是一块一块地取出数据,而不是一次全部放入,就像'communic()'一样...... – glglgl