2016-11-26 7 views
1

サブプロセスのさまざまな関数やPython2のコマンドモジュールからキャプチャされたstdout/stderrが標準文字列であることが保証されているのですか?あるいは特定の条件下でUnicodeオブジェクトが返される可能性がありますか? ...標準のPython2文字列の場合、サブプロセスからUnicodeが出力されるとどうなりますか?サブプロセス/コマンドモジュールはPython2でUnicodeを認識していますか?

もっと直接的に言えば、Unicode文字を出力するPython2のサブプロセス呼び出しを堅牢に処理するにはどうすればよいでしょうか?

Python3の場合はそれとは大きく異なりますか?

答えて

1

サブプロセス出力は常に†(ここで "str" と呼ばれる)はPython 2とPython 3(ここで、 "bytes" と呼ばれる)の両方のバイトであろう。 "ユニコードオブジェクト"はPythonの内部概念であるため、サブプロセスがユニコードを出力することはできません。出力は常にバイトです。

バイトがテキストデータの表現である場合、出力をデコードする前に、サブプロセスによって使用されているエンコードを知る必要があります。異なるサブプロセスが異なるエンコーディングを出力する可能性があるため、ここで正解が1つもありません。

ここで注意すべき奇妙なエッジケースがあります。 kwarg universal_newlines=Trueを使用してサブプロセスを起動すると、出力はlocale.getpreferredencoding関数によって返されたエンコーディングを使用して自動的にデコードされます。

関連する問題