使用子进程来确定进程何时结束

问题描述:

我希望按顺序运行一些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" 
+1

新代码是无意义的:你正忙着等待进程死掉(wait()会做同样的事情,只是没有过热你的CPU),然后尝试与死进程进行通信! 如果您启动的脚本在后台分出一个新进程,然后立即返回,那么您可以做的事情就不多了。你必须得到孙子进程的pid,然后在其上执行os.wait()。 – 2010-07-10 14:10:27

您可以使用subprocess.poll检查状态而不阻塞,并subprocess.communicate到发送信息给子进程。

+0

如果它给我“按任意键继续...”我认为它还没有返回任何价值呢?这不会使subprocess.poll那种无用的? – hungrydude 2010-07-07 16:36:52

+0

是的,这似乎并没有等待它打印“按任意键继续...” – hungrydude 2010-07-07 16:44:37

+0

尝试使用沟通 - 当然这假设'stdout'和'stdin'已经绑定到'subprocess .PIPE',所以你需要把它改成'.Popen(cmd,stdout = subprocess.PIPE,stdin = subprocess.PIPE)' – 2010-07-07 16:49:29