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
函数返回的编码自动解码。
从子进程中的各种函数或命令模块中捕获的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
函数返回的编码自动解码。