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

問題:寫好的python腳本,直接在命令行執行沒問題,放到crontab內卻在腳本中輸出中文的地方報錯python

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其實是三個中文字符 linux

鑑於crontab裏沒有tty/pts(終端)這個事實,即不會執行$HOME/下的一些環境初始工做。以前就遇到過在crontab裏執行某些linux命令有問題的狀況,此次估計也是這兒致使的問題 ide

在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,在觀察輸出,以下code

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

能夠看到其中多了一行字符集的設定,問題也就是在於此了。另外能夠引伸一下,其餘類型的在crontab裏執行命令遇到的環境變量相關的問題,大多也能夠經過這種方式解決。orm