关于subprocess输出乱码的问题求救
公司网络特定网段能够ping通某监控服务器,在不想重新部署监控服务器的情况下利用python做个小工具,ping不通就报警。
发邮件的功能已经做出来,但是在ping检测的时候在windows下显示乱码。
我在mac下做个测试内容如下:
import subprocess icmp_out = subprocess.Popen('ping 172.10.10.68',
shell=True,
stdout=subprocess.PIPE
)
while True:
line = icmp_out.stdout.readline().strip()
a = "测试"
print(line + a.encode("UTF-8")) #不能正常输出测试中文,显示 \\xe6\\xb5\\x8b\\xe8\\xaf\\x95
print(a) #能正常输出测试中文
在mac下的pycharm运行代码,显示如下:
b'64 bytes from 172.10.10.68: icmp_seq=0 ttl=64 time=0.060 msxe6xb5x8bxe8xafx95'
测试
我已经查找了好多subprocess中文乱码问题,但是都无法解决,比如encode('gb2312'),print(line.decode('cp936').encode('utf-8'))
都不行。是在没办法了。求大佬解惑!感谢!
回答:
打印没有解码的bytes怎么会有中文哇。。。
import subprocess import platform
win = platform.system() == "Windows"
icmp_out = subprocess.Popen('ping 127.0.0.1' + (" -n 2" if win else " -c 2"),
shell=True,
stdout=subprocess.PIPE)
stdout, stderr = icmp_out.communicate(timeout=5)
print(stdout.decode(encoding=("gbk" if win else "utf8")))
回答:
你是用python2还是python3
我用python3.6.7本地跑了你的代码 并没有中文乱码问题
回答:
import subprocess
icmp_out = subprocess.Popen('ping 127.0.0.1' + (" -n 2" if win else " -c 2"),
shell=True,encoding="utf8"
stdout=subprocess.PIPE)
stdout, stderr = icmp_out.communicate(timeout=5)
print(stdout)
这样也可以的
以上是 关于subprocess输出乱码的问题求救 的全部内容, 来源链接: utcz.com/a/162592.html