17

ログメッセージを出力するPythonコードがいくつかあります。コマンドラインで実行すると、utf-8で問題なく動作します。特殊文字を含むログメッセージは正常に出力されます。ただし、nohupの下でバックグラウンドで実行すると、utf-8文字でbarfsします。

nohup python2.7 myProgram.py &

私が見るエラーは、通常の「utfをASCIIでエンコードしようとする」エラーです。

UnicodeEncodeError:'ascii'コーデックは71桁目の文字u'\ u2013'をエンコードできません:序数が範囲内にありません(128)

これは、nohupがPythonに通常の端末がないことを通知するためだと思います。そのため、デフォルトでasciiになります。nohupにutf-8を有効にして実行するように指示する方法、またはutf-8文字がバックグラウンドでnohupの下で実行されたときにクラッシュを引き起こさないように設定する方法はありますか?

4

1 に答える 1

23

PYTHONIOENCODINGを使用します。

export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py &

たとえば、

myProgram.py :

unicode_obj=u'\N{INFINITY}'
print(unicode_obj)    

その後、実行中

nohup python2.7 myProgram.py > /tmp/test &

生産する

/tmp/テスト:

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

その間

export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py > /tmp/test &

生産する

/tmp/テスト:

于 2011-04-11T20:22:12.847 に答える