关于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'))
都不行。是在没办法了。求大佬解惑!感谢!

阅读 14.6k
3 个回答

打印没有解码的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)

这样也可以的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题