如何通过 subprocess 持续获取输出内容

在实际应用中会用到subprocess的Popen方法执行一些命令,而我们需要通过执行这个命令的来获取输出进行一些信息记录或者分析使用,如果是很快就可以执行完的那还好,有时需要持续跟踪内容的输出,比如大型服务器的内存、CPU、进程监控等,这是一个持续的过程,那么就需要想方设法将输出的内容实时的记录到控制台或者文件中,下面是举例一个ping指令,后面带上 -t 参数获取实时的ping情况,代码如下:

1 # -*- coding:utf-8 -*-
2 
3 import subprocess
4 cmd = r"ping www.baidu.com -t"
5 result = subprocess.Popen(cmd, stdout=subprocess.PIPE)  # 将输出内容存至缓存中
6 while True:  # 将内容持续输出
7     with open("ping.txt", "a", encoding="utf-8") as f:
8         f.write(result.stdout.readline().decode("gbk").strip() + "
")  # 先去除每一行末尾的制表符和换行符,然后再加上换行符,使写入文件中的内容不会有空行

然后在该代码路径下找到ping.txt文件并打开显示如下,挺整齐的:

如果不在代码中第8行增加去除末尾的制表符和换行符的话,得出的结果会是这样的,会出现空行情况

原文地址:https://www.cnblogs.com/aziji/p/12029792.html