您当前的位置:首页 > 计算机 > 编程开发 > Python

Python实时获取外部程序输出结果

时间:11-09来源:作者:点击数:

如何Python实时获取外部程序输出结果,可以在运行时加上-u参数或者在print函数中使用flush=True

下面写两个脚本验证一下是否可行。

system_time.py

获取系统时间,每秒打印一次,共打印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)

运行结果

在这里插入图片描述

result_output.py

使用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)

运行结果:

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐