【发布时间】:2010-07-07 15:56:23
【问题描述】:
我希望按顺序运行一些派生自己进程的 c 脚本(在新的命令行窗口中),并在它们完成时提供"Press any key to continue..."。从技术上讲,它是一个特殊的编译器。它弹出一个命令行窗口并告诉我编译是否成功。但是那个命令行窗口会派生新的进程来编译,这会在它应该之前返回 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"
【问题讨论】:
-
新代码是荒谬的:您正忙于等待进程终止(wait() 也会这样做,只是不会使您的 CPU 过热),然后尝试与死进程通信!如果您正在启动的脚本在后台创建了一个新进程,然后立即返回,那么您无能为力。您必须获取孙进程的 pid,然后对其执行 os.wait()。
标签: python windows process build-automation fork