[转]记一次诡异的python脚本中编码报错,crontab执行报错,但手动执行正常

蛋蛋 2022年09月17日 15 0

一、背景

通过python脚本定时执行脚本,手动执行正常,但是放到定时任务中就异常了。

二、环境

操作系统:CentOS release 6.5 (Final)
python版本:Python 3.6.13

三、报错信息

# cat test.log
Traceback (most recent call last):
  File "/home/test.py", line 7, in <module>
    print(ilstr)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

四、整个python脚本

#!/usr/bin/python3
# coding: utf-8
ilstr="测试测试"+",测试2测试2。"
print(ilstr)

五、crontab配置

# crontab -l
* * * * * /usr/bin/python3 /home/test.py >>/home/test.log  2>&1

六、诡异现象

奇怪的是,完全一样的脚本,使用crontab跑定时任务就会报上面的错误,但是手动执行就完全没有问题:

# ./test.py
测试测试,测试2测试2。

七、原因分析

crontab执行脚本时的环境变量跟直接以root用户身份手动执行的时候环境变量不同。

八、解决办法

在/etc/crontab文件中添加一条载入命令source即可:经过测试这种方法生效了,没有再报错。

# crontab -l
* * * * * source /etc/profile &&  /usr/bin/python3 /home/test.py >>/home/test.log  2>&1


————————————————
版权声明:本文为CSDN博主「limuitech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhuangzi123456/article/details/102597032

Last Updated: 2022/09/17 00:16:18
抓包工具_[转]F12浏览器开发者工具 linux部署_[原创]Centos安装Python3详细教程