在cmd中通过Python运行工具不会等待

时间:2014-06-11 10:48:35

标签: python windows process cmd subprocess

我正通过Python中的cmd运行工具。对于给定目录中的每个示例,我希望该工具执行某些操作。但是,当我在循环中使用process = subprocess.Popen(command)时,命令不会等到它完成,导致一次提示10个。当我使用subprocess.Popen(command, stdout=subprocess.PIPE)时,命令仍然是黑色的,我看不到进度,虽然它确实等待,直到命令完成。

有没有人知道如何通过Python中的cmd调用外部工具的方式,等待命令完成并且能够在{{1}中显示工具的进度}}?

cmd

编辑:command = perl或java命令。由于提示(perl窗口或java窗口)仍然是黑色,因此上面的化妆我看不到工具输出。

2 个答案:

答案 0 :(得分:1)

看起来你的子进程分叉,否则wait()会在进程完成之前返回。

答案 1 :(得分:0)

顺序在这里很重要:首先阅读输出,然后等待。

如果你这样做:

process.wait()
process.stdout.read()

如果管道缓冲区已满,您可能会遇到死锁:子进程在等待stdout时阻塞并且永远不会到达结尾,程序会阻塞wait()并且永远不会到达read()

改为

process.stdout.read()
process.wait()

将读到EOF。

如果你想要进程的标准输出,那就很有用。

如果您不想要,则应省略stdout=PIPE内容。然后将输出定向到该提示窗口。然后你也可以省略process.stdout.read()

通常,process.wait()应该防止一次运行10个实例。如果这不起作用,我不知道为什么不......