【问题标题】:Are the subprocess/commands modules Unicode aware with Python2?Python2 是否支持 Unicode 子进程/命令模块?
【发布时间】:2017-04-10 08:46:58
【问题描述】:
从 subprocess 中的各种函数或 Python2 的 commands 模块中捕获的 stdout/stderr 是否保证是标准字符串,或者在某些条件下是否有可能返回 Unicode 对象? ...如果返回一个标准的 Python2 字符串 is,如果子进程输出 Unicode,会发生什么?
或者更直接一点,稳健处理可能输出 Unicode 字符的 Python2 子进程调用的最佳方法是什么?
如果是 Python3 会不会有很大的不同?
【问题讨论】:
标签:
python
subprocess
python-2.x
python-unicode
【解决方案1】:
子进程输出在 Python 2(此处称为“str”)和 Python 3(此处称为“bytes”)中始终†是字节。子进程不可能输出 unicode,因为“unicode 对象”是 Python 内部的一个概念。输出总是字节。
如果字节是文本数据的表示,那么在解码输出之前,您必须知道子进程使用什么编码。不同的子流程可以输出不同的编码,所以这里没有一个正确的答案。
†这里有一个奇怪的边缘情况需要注意。如果您使用 kwarg universal_newlines=True 启动子进程,则输出将使用 locale.getpreferredencoding 函数返回的编码自动解码。