使用子进程检测进程结束时间

2 投票
1 回答
2801 浏览
提问于 2025-04-16 00:56

我想要依次运行一些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 来给这个子进程发送信息。

撰写回答