2016-11-26 10 views
1

Является ли stdout/stderr, захваченным из различных функций в подпроцессе, или модуль команд для Python2 гарантированно является стандартной строкой, или возможно при определенных условиях вернуть объект Unicode? ... И если стандартная строка Python2 возвращается, что произойдет, если подпроцесс выводит Unicode?Являются ли модули подпроцесса/команд Unicode осведомленными с Python2?

Или получить более точную информацию о том, что является лучшим способом надежной обработки вызова подпроцесса Python2, который может выводить символы Unicode?

И было бы существенно отличаться, если бы это был Python3?

ответ

1

Выход подпроцесс всегда быть байт как Python 2 (так называемый "str" здесь) и Python 3 (так называемый "bytes" здесь). Подпроцесс не может выводить unicode, потому что «объект unicode» - это концепция, внутренняя для Python. Вывод всегда байтов.

Если байты представляют собой текстовые данные, вы должны знать, какая кодировка используется подпроцессом, прежде чем вы сможете декодировать вывод. Различные подпроцессы могут выводить разные кодировки, поэтому здесь нет ни одного правильного ответа.

Существует один странный краевой кейс, чтобы знать об этом здесь. Если вы запустите подпроцесс, используя kwarg universal_newlines=True, то результат будет автоматически декодирован с использованием кодировки, возвращаемой функцией locale.getpreferredencoding.