实时获取terminal的输出而不是等到程序结束再获得输出。
通过子进程的方法,让父进程获取子进程的输出。
main.py
import time
import sys
import subprocess
import shlex
shell_cmd = 'python sub.py'
cmd = shlex.split(shell_cmd)
p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE)
while p.poll() is None:
line = p.stdout.readline()
print('get '+line.decode())
def test():
x = 1
print(res)
while x<10:
x += 1
print(x)
time.sleep(1)
sub.py
import time
import sys
x = 1
while x<10:
x += 1
print(x)
sys.stdout.flush() #注意一定要加sys.stdout.flush()
time.sleep(0.3)
python main.py
如果没有sys.stdout.flush(),仍然无法做到实时。标准输出和标准错误输出有一个缓存的概念,它不会立即将程序的标准输出内容返回,而是会做一定的缓存, 直到缓存满或者程序结束强制清空缓存时才输出。我们只需要在子程序中,每次输出后去手动清空一下缓存即可。