subprocess/commands 模块是否支持 Python2 的 Unicode?

Are the subprocess/commands modules Unicode aware with Python2?

从子进程中的各种函数或命令模块中捕获的stdout/stderr是否保证Python2是标准字符串,或者在某些条件下是否可能返回Unicode对象? ... 如果返回标准 Python2 字符串 ,如果子进程输出 Unicode 会怎样?

或者更直接地说,稳健处理可能输出 Unicode 字符的 Python2 子进程调用的最佳方法是什么?

如果是 Python3 会有很大不同吗?

子进程输出将始终 是 Python 2(此处称为“str”)和 Python 3(此处称为“bytes”)。子进程不可能输出unicode,因为"unicode object"是Python内部的概念。输出总是字节。

如果字节是文本数据的表示,那么在解码输出之前,您必须知道子进程使用什么编码。不同的子进程可能输出不同的编码,所以这里没有一个正确答案。

这里有一个奇怪的极端情况需要注意。如果您使用 kwarg universal_newlines=True 启动子进程,那么输出将使用 locale.getpreferredencoding 函数返回的编码自动解码。