如何Python实时获取外部程序输出结果,可以在运行时加上-u参数或者在print函数中使用flush=True
下面写两个脚本验证一下是否可行。
获取系统时间,每秒打印一次,共打印3次
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import datetime
import time
for line in range(0, 3):
print(datetime.datetime.now().strftime("%H:%M:%S"))
if line == 2:
break
time.sleep(1)
运行结果
使用subprocess.Popen执行启动system_time.py文件命令
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import subprocess
res = subprocess.Popen(["/usr/bin/python3 /root/system_time.py"],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
while res.poll() is None:
print(res.stdout.readline())
运行结果
运行result_output.py发现并没有实时的逐行打印,那加上-u参数试一下
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import subprocess
res = subprocess.Popen(["/usr/bin/python3 -u /root/system_time.py"],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
while res.poll() is None:
print(res.stdout.readline())
运行结果
加上-u后可以实时打印了,在看一下在print函数中加上flush=True的效果
首先要在result_output.py文件中去掉-u参数,然后在system_time.py文件的print函数中加上flush=True
result_output.py文件内容
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import subprocess
res = subprocess.Popen(["/usr/bin/python3 /root/system_time.py"],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
while res.poll() is None:
print(res.stdout.readline())
system_time.py文件内容
# !/usr/bin/python3
# -*- coding: utf-8 -*-
import datetime
import time
for line in range(0, 3):
print(datetime.datetime.now().strftime("%H:%M:%S"))
if line == 2:
break
time.sleep(1)
运行结果: