[记]Python获取控制台输出的方法
使用库 os、subprocess
1.使用subprocess库
非实时读取
import subprocess # xe = subprocess.run("iperf3 -c 127.0.0.1 -p 5668 -J",stdout=subprocess.PIPE) xe = subprocess.run("ping baidu.com",stdout=subprocess.PIPE) print(xe.stdout.decode("gbk"))#打印控制台输出 print(xe.returncode)#为0为运行ok,为1则运行异常
0x01 执行成功
输出打印
正在 Ping baidu.com [220.181.38.148] 具有 32 字节的数据: 来自 220.181.38.148 的回复: 字节=32 时间=36ms TTL=49 来自 220.181.38.148 的回复: 字节=32 时间=36ms TTL=49 来自 220.181.38.148 的回复: 字节=32 时间=37ms TTL=49 来自 220.181.38.148 的回复: 字节=32 时间=37ms TTL=49 220.181.38.148 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 36ms,最长 = 37ms,平均 = 36ms 0
0x02 执行失败
输出打印
Ping 请求找不到主机 xezzc.com。请检查该名称,然后重试。 1
实时读取
import subprocess def cmd_deal(cmd:str): xe = subprocess.Popen(cmd,stdout=subprocess.PIPE) while True: rt_data = xe.stdout.readline().decode("GBK") if rt_data!="": print(rt_data,end="") else: break return xe.wait()#执行成功返回0,执行失败返回1 if __name__=="__main__": print(cmd_deal("ping baidu.com"))
0x01执行成功
输出打印
正在 Ping baidu.com [220.181.38.251] 具有 32 字节的数据: 来自 220.181.38.251 的回复: 字节=32 时间=39ms TTL=49 来自 220.181.38.251 的回复: 字节=32 时间=39ms TTL=49 来自 220.181.38.251 的回复: 字节=32 时间=39ms TTL=49 来自 220.181.38.251 的回复: 字节=32 时间=39ms TTL=49 220.181.38.251 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 39ms,最长 = 39ms,平均 = 39ms 0
0x02执行失败
输出打印
Ping 请求找不到主机 bxsdsd.com。请检查该名称,然后重试。 1
2.使用os库
非实时读取
import os xe=os.popen("ping baidu.com",'r') print(xe.read())
0x01执行成功
输出打印
正在 Ping baidu.com [220.181.38.251] 具有 32 字节的数据: 来自 220.181.38.251 的回复: 字节=32 时间=39ms TTL=49 来自 220.181.38.251 的回复: 字节=32 时间=39ms TTL=49 来自 220.181.38.251 的回复: 字节=32 时间=40ms TTL=49 来自 220.181.38.251 的回复: 字节=32 时间=40ms TTL=49 220.181.38.251 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 39ms,最长 = 40ms,平均 = 39ms
0x02执行失败
输出打印
Ping 请求找不到主机 bxsezc.com。请检查该名称,然后重试。