Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用子流程确定流程何时结束_Python_Windows_Process_Build Automation_Fork - Fatal编程技术网

Python 使用子流程确定流程何时结束

Python 使用子流程确定流程何时结束,python,windows,process,build-automation,fork,Python,Windows,Process,Build Automation,Fork,我希望按顺序运行一些c脚本,这些脚本分叉它们自己的进程(在一个新的命令行窗口中),并在完成后给出“按任意键继续…”。从技术上讲,它是一个特殊的编译器。它弹出一个命令行窗口,告诉我编译是否成功。但是,该命令行窗口分叉新的进程进行编译,这些进程在应该返回0之前返回0 我的第一次尝试是 process = subprocess.Popen(cmd) process.wait() 在迭代每个文件时。不幸的是,这并没有等到“按任意键继续…”就在我面前爆炸了。内部进程完成时,wait()调

我希望按顺序运行一些c脚本,这些脚本分叉它们自己的进程(在一个新的命令行窗口中),并在完成后给出
“按任意键继续…”
。从技术上讲,它是一个特殊的编译器。它弹出一个命令行窗口,告诉我编译是否成功。但是,该命令行窗口分叉新的进程进行编译,这些进程在应该返回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()。