实时打印外部命令的输出,并在python中同时将其放在一个字符串中

时间:2014-11-09 02:30:34

标签: python io subprocess

例如:

#!/usr/bin/env python3

# cmd.py

import time
for i in range(10):
    print("Count %d" % i)
    time.sleep(1)

#!/usr/bin/env python3

import subprocess

# useCmd.py

p = subprocess.Popen(['./cmd.py'], stdout=subprocess.PIPE)
out, err = p.communicate()
out = out.decode()
print(out)

在useCmd.py中我可以打印出cmd.py的输出,但只有在它完成输出之后。如何实时打印出来并将其存储在字符串中? (有点像bash中的发球台。)

1 个答案:

答案 0 :(得分:1)

如果你不必处理stdin,你可以避免使用阻塞的communicate,并直接从进程stdout读取直到你的stdout结束:

p = subprocess.Popen(['python', 'cmd.py'], stdout=subprocess.PIPE)
# out, err = p.communicate()
while True:
    line = p.stdout.readline()
    if line != '':
        print line,
    else:
        break

related