具有非 UTF-8 输出的 Python 的 subprocess.getoutput

标签 python utf-8

有没有办法让 subprocess.getoutput 处理不是有效 UTF-8 的输出?如果命令的输出返回非 UTF-8 字符,则会引发异常。但是,该函数似乎没有编码参数。

File "foo.py", line 104, in <module>
  OutText = subprocess.getoutput(TheCmd)
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 827, in getoutput
  return getstatusoutput(cmd)[1]
. . .
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/codecs.py", line 321, in decode
  (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 1495: invalid continuation byte

最佳答案

您可以尝试另一个带有选项 test=True 的命令 subprocess.check_output。这个函数的结果是字节。然后您可以使用正确的编解码器手动解码字节以获得字符串结果。像这样:

import subprocess

cmd = "svn log"
result_bytes = subprocess.check_output(cmd, text=False)
result = result_bytes.decode("gb2312")
print(result)

关于具有非 UTF-8 输出的 Python 的 subprocess.getoutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113630/

相关文章:

encoding - 如何将Big5编码的txt文件转换为UTF8编码的txt文件?

PHP Define() 函数不适用于 unicode utf-8 字符

带有另一个基类的 python 抽象方法破坏了抽象功能

python - 使用来自 win32com 的数据向 Excel 提供命名冲突 (_FilterDatabase)

python - 正则表达式匹配模式但排除与内部特定单词的匹配

c++ - 在 UTF8 wstring 中从控制台转换带有重音符号的字符串

python - 如何检查是否可以使用 tarfile 模块写入 tar 文件?

python - 根据列中的时间从文件中随机抽样行

vim - 如何在 Vim 中对 UTF-8 行进行排序?

java - 获取请求的 UTF-8 JSF 编码参数