您的位置:首页 > 编程语言 > Python开发

python中正确显示windows系统上其他进程的输出

2017-11-25 11:37 330 查看

python中正确显示windows系统上其他进程的输出

现象

try:
subprocess.check_output(cmd_list)
except subprocess.CalledProcessError as e:
error = e.output.decode()
print("error:{0}".format(error))


windows
系统上使用
python
脚本中的
subprocess
库启动其他进程后对输出内容进行打印,当输出内容有中文时会出现异常

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 14: invalid continuation byte


可以看到明显是函数
decode
在字符编码转换除了问题。

原因

输出的内容是
bytes
对象,存储的是二进制内容,所以要显示的话需要先将
bytes
转换为
str
,
bytes
的转换方法是
decode
。但是二进制转换为字符需要考虑到编码问题,方法
decode
默认用utf8编码,而在在我的windows上的程序输出是gbk编码。

座椅就导致了异常

解决方案

最简单的解决方案就是在
decode
方法中传入编码参数“gbk”。但是这使得python程序失去了可移植性。所以最好能获取到当前系统的编码。

import locale
lan,codec=locale.getdefaultlocale()


locale
模块中的
getdefaultlocale
方法可以获取到当前系统的语言和编码,返回值是一个元组,第二个成员就是编码信息,只要把这个
codec
变量传入
decode
方法即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python