我正在将我的python脚本从一台服务器迁移到新的docker容器。但是我在编码方面遇到了一个奇怪的问题,我尝试了几种解决方案,但没有成功从crontab运行python脚本时的编码问题
如果我直接从终端(手动)运行脚本,它会成功执行。但是,如果我通过运行crontab我得到以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character
我创建了一个小的脚本只是为了检查编码:
import sys
print sys.stdout.encoding
如果我手动运行,我得到如下回应:
UTF-8
然后,我说在cron这个脚本,并指示输出到文件:
* * * * * /tmp/p.py > /tmp/p.log
它保存了一个空的p.log ...所以我认为python没有从crontab获取编码。
我看到了一些建议,在调用命令之前在crontab中添加编码变量,但它不适用于我。 为为例:
* * * * * PYTHONIOENCODING=UTF-8 /tmp/p.py > /tmp/p.log
或
* * * * * LANG=UTF-8 /tmp/p.py > /tmp/p.log
而且,我试图加入这个变量在我的crontab文件的头部。没有成功。
我使用Ubuntu的安装几个区域设置:
locale -a
C
C.UTF-8
en_US.utf8
POSIX
这里是我的语言环境(外界的cron):
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我有运行多个Python脚本,所以它不是一个好主意编辑它们(另外,正如我所说的,当在cron外部调用时它运行完美)。