linux crontabでpythonスクリプトを実行する中国語文字セットの問題

1156 ワード

質問:作成したpythonスクリプトは、コマンドラインで直接実行しても問題ありませんが、crontab内に置いてスクリプトから中国語を出力する場所でエラーが発生しました.
    print('{} {}  \u5904\u7406\u81f3  {}'.format(time.strftime('%H:%M:%S', time.localtime()), log, line_result[3]))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 27-29: ordinal not in range(128)

このうちu 5904u 7406u 81 f 3は実際には3つの中国語文字です
crontabにtty/pts(端末)がないという事実を考慮すると、$HOME/の下のいくつかの環境初期動作は実行されません.以前からcrontabでlinuxコマンドを実行するのに問題があったことがありますが、今回もここで問題が発生したと思います.
linuxコマンドラインでenvコマンドを実行し、現在のtty/ptsのシステム変数値を出力します.LANG=en_US.UTF-8またはLANG=zh_CN.UTF-8、しかしenvコマンドはcrontabの中でほんの数行の内容だけを出力します
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

次にcrontabのenvコマンドの前に文字セットを設定するコマンドexport LANG=zh_を1行追加します.CN.UTF-8、出力を観察すると、以下のようになります.
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=zh_CN.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

1行以上の文字セットの設定が表示されますが、問題はここです.また,crontabでコマンドを実行する他のタイプの環境変数に関する問題も,このような方法で解決できることが多い.
転載先:https://blog.51cto.com/kaifly/2358278