在linux crontab中執行python腳本中文字符集問題

問題:寫好的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)
其中\u5904\u7406\u81f3實際上是三個中文字符

鑑於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_CN.UTF-8,在觀察輸出,如下

SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=zhCN.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
=/usr/bin/env
可以看到其中多了一行字符集的設定,問題也就是在於此了。另外可以引申一下,其他類型的在crontab裏執行命令遇到的環境變量相關的問題,大多也可以通過這種方式解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章