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

来源:互联网 发布:原生家庭这个词知乎 编辑:程序博客网 时间:2024/06/10 15:53

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 localelan,codec=locale.getdefaultlocale() 

locale模块中的getdefaultlocale方法可以获取到当前系统的语言和编码,返回值是一个元组,第二个成员就是编码信息,只要把这个codec变量传入 decode 方法即可。

阅读全文
0 0