python 获取控制台输出内容 解决中文乱码

Python获取控制台输出

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

0x02 执行失败

输出打印

Ping 请求找不到主机 xezzc.com。请检查该名称,然后重试。

实时读取

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"))

 例子2:

import subprocess
# file and directory listing
returned_text = subprocess.check_output("dir", shell=True, universal_newlines=True)
print("dir command to list file and directory")
print(returned_text)

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。请检查该名称,然后重试。

常见问题:

subprocess输出乱码

returned_text = subprocess.check_output("dir",encoding="utf8", shell=True, universal_newlines=True)

添加:,encoding="utf8"

或者切换python版本到3.11

猜你喜欢

转载自blog.csdn.net/m0_61634551/article/details/130100092