我正通过Python
中的cmd
运行工具。对于给定目录中的每个示例,我希望该工具执行某些操作。但是,当我在循环中使用process = subprocess.Popen(command)
时,命令不会等到它完成,导致一次提示10个。当我使用subprocess.Popen(command, stdout=subprocess.PIPE)
时,命令仍然是黑色的,我看不到进度,虽然它确实等待,直到命令完成。
有没有人知道如何通过Python
中的cmd
调用外部工具的方式,等待命令完成并且能够在{{1}中显示工具的进度}}?
cmd
编辑:command = perl或java命令。由于提示(perl窗口或java窗口)仍然是黑色,因此上面的化妆我看不到工具输出。
答案 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个实例。如果这不起作用,我不知道为什么不......