4

エラーなしで実行してい./sample.py --url http://blah.comますが、実行./sample.py --url http://blah.com | wc -lまたは同様の場合、エラーが発生します。

UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' in position 0: ordinal not in range(128)

Pythonスクリプトをターミナルコマンドと互換性を持たせるにはどうすればよいですか?sys.stdin.isattyそのユースケースは反対のように見えますが、私は参照を見続けています。

4

2 に答える 2

6

Pythonが端末に出力していることを検出すると、sys.stdout.encoding端末のエンコーディングに設定されます。を使用printするとunicode、はを使用してにunicodeエンコードされます。strsys.stdout.encoding

Pythonが端末に出力していることを検出しない場合、sys.stdout.encodingはに設定されNoneます。の場合print、コーデックが使用されます(少なくともPython2では)。に0〜127以外のコードポイントが含まれている場合、これによりUnicodeErrorが発生します。unicodeasciiunicode

unicodeこれを修正する1つの方法は、印刷する前に明示的にエンコードすることです。それはおそらく適切な方法ですが、大量の印刷ステートメントが散在している場合は面倒な場合があります。

これを修正する別の方法は、PYTHONIOENCODING環境変数を適切なエンコーディングに設定することです。例えば、

PYTHONIOENCODING=utf-8

ascii次に、出力をファイルに出力するときの代わりに、このエンコーディングが使用されます。

詳細については、PrintFailswikiページを参照してください。

于 2012-11-20T20:40:46.447 に答える
-1

試す:

(./sample.py --url http://blah.com) | wc -l

これにより、Pythonスクリプトを実行するためのサブシェルが生成され、出力がからstdoutにパイプされます。wc

于 2012-11-20T20:35:59.470 に答える