Python 使用子流程确定流程何时结束
我希望按顺序运行一些c脚本,这些脚本分叉它们自己的进程(在一个新的命令行窗口中),并在完成后给出Python 使用子流程确定流程何时结束,python,windows,process,build-automation,fork,Python,Windows,Process,Build Automation,Fork,我希望按顺序运行一些c脚本,这些脚本分叉它们自己的进程(在一个新的命令行窗口中),并在完成后给出“按任意键继续…”。从技术上讲,它是一个特殊的编译器。它弹出一个命令行窗口,告诉我编译是否成功。但是,该命令行窗口分叉新的进程进行编译,这些进程在应该返回0之前返回0 我的第一次尝试是 process = subprocess.Popen(cmd) process.wait() 在迭代每个文件时。不幸的是,这并没有等到“按任意键继续…”就在我面前爆炸了。内部进程完成时,wait()调
“按任意键继续…”
。从技术上讲,它是一个特殊的编译器。它弹出一个命令行窗口,告诉我编译是否成功。但是,该命令行窗口分叉新的进程进行编译,这些进程在应该返回0之前返回0
我的第一次尝试是
process = subprocess.Popen(cmd)
process.wait()
在迭代每个文件时。不幸的是,这并没有等到“按任意键继续…”就在我面前爆炸了。内部进程完成时,wait()
调用似乎被传递(我没有访问权限)
我如何才能等待“按任意键继续…”?在按任意键继续生产线之前,它也会打印一些其他信息
目前,我的代码是:
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
completed = False
while not completed:
if process.poll() is not None:
completed = True
print "communicating"
process.communicate("k")
print "communicated"
您可以使用
subprocess.poll
检查状态而不阻塞,也可以使用subprocess.communicate
向子流程发送信息 如果它给我“按任意键继续…”我以为它还没有返回任何值?这不会使subprocess.poll变得毫无用处吗?是的,这似乎不是在等待它打印“按任意键继续…”尝试使用communicate-当然,这假设stdout
和stdin
已绑定到subprocess.PIPE
,因此您需要将其更改为.Popen(cmd,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
我已经用我所拥有的更新了这个问题。它似乎锁定在communicate()命令上。我也尝试了它,没有参数试图从中获取stdout,但没有骰子。新代码毫无意义:你正忙着等待进程死亡(wait()如果您正在启动的脚本在后台派生一个新进程,然后立即返回,那么您就无能为力了。您必须获取孙子进程的pid,然后对其执行os.wait()。