我看到有几种解决方案可以在从python中调用时实时捕获命令输出。我有这样的案例。
run_command.py
import time
for i in range(10):
print "Count = ", i
time.sleep(1)
check_run_command.py - 这个尝试实时捕获run_command.py输出。
import subprocess
def run_command(cmd):
p = subprocess.Popen(
cmd,
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE
)
while True:
line = p.stdout.readline()
if line == '':
break
print(line.strip())
if __name__ == "__main__":
run_command("python run_command.py".split())
$ python check_run_command.py
(Waits 10 secs) then prints the following
Count = 0
Count = 1
....
Count = 9
我不确定为什么在这种情况下我无法实时捕获输出。我在其他线程中尝试了多个解决方案来解决同样的问题,但没有帮助。 run_command.py中的sleep是否与此有关。
我尝试运行ls命令,但无法确定输出是实时打印还是在处理完成后打印,因为命令本身很快就完成了。因此,我添加了一个睡觉。