gpt4 book ai didi

python-2.7 - 从 crontab 运行 python 脚本时的编码问题

转载 作者:行者123 更新时间:2023-12-02 15:15:46 25 4
gpt4 key购买 nike

我正在将我的 python 脚本从一台服务器迁移到一个新的 docker 容器。但是我遇到了一个奇怪的编码问题,我尝试了几种解决方案都没有成功。

如果我直接从终端(手动)运行脚本,它会成功执行。但是,如果我通过 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 外部调用时它运行完美)。

最佳答案

其实是crontab的问题,编辑文件的时候没有自动reload。

强制重新加载我所做的:

crontab /etc/crontab

service cron restart

现在 crontab 正在正确加载环境变量。在 crontab 文件的头部有以下变量:

SHELL=/bin/bash

TERM=xterm
PYTHONIOENCODING=UTF-8
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

关于python-2.7 - 从 crontab 运行 python 脚本时的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40718088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com