使用子进程检测进程结束时间
我想要依次运行一些C语言脚本,这些脚本会自己开启新的进程(在新的命令行窗口中),并在完成后显示"Press any key to continue..."
。从技术上讲,这其实是一个特殊的编译器。它会弹出一个命令行窗口,告诉我编译是否成功。但是,这个命令行窗口会开启新的进程来进行编译,这导致它在应该等待的时候就返回了0。
我第一次尝试是
process = subprocess.Popen(cmd)
process.wait()
在遍历每个文件时。不幸的是,这样做并不能等待"Press any key to continue...",结果让我很失望。看起来wait()
这个调用是在一个内部进程完成时就返回了(而我无法访问这个进程)。
那么,我该如何等待"Press any key to continue..."呢?在"Press any key to continue..."之前,它还会打印一些其他信息。
目前,我的代码是这样的:
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 个回答
2
你可以用 subprocess.poll
来检查一个子进程的状态,这个方法不会让你的程序停下来等结果。同时,你可以用 subprocess.communicate
来给这个子进程发送信息。