问题描述
在Python 2.7中,使用subprocess.Popen()调用*nix命令,并通过管道,获取其输出,并将其返回值格式化成utf-8格式,但是对于返回值出现中文时,会造成转码错误,具体情况如下:
# -*- coding: utf-8 -*-
import subprocess
MY_RPM_FILE_PATH = '/home/dongliang.ma/rpmbuild/RPMS/noarch/q-yumtools-server-1.1.0-1.el6.noarch.rpm'
try:
cmd_args = ['rpm', '-qip', MY_RPM_FILE_PATH]
infos = subprocess.Popen(cmd_args, stdout=subprocess.PIPE, shell=False).stdout.readlines()
unicode_text = u''.join(infos)
print unicode_text
except Exception, _ex:
print 'ERROR: %s' % str(_ex)
问题分析
从python的报错来看,是中文编码超出了ASCII码的表示范围,具体报错的代码为:
unicode_text = u''.join(infos)
既然是无法表示,我的第一反应就是进行转码,于是将代码改写:
# -*- coding: utf-8 -*-