python - 为什么Python3解释器仅在通过fcron执行时才会引发UnicodeEncodeError?

标签 python python-3.x utf-8 io cron

给定简单的脚本:

#!/usr/bin/env python3

b = 'строка'.encode()
print(b.decode('utf-8'))

如果我直接运行它 python3 script.py/full/path/to/script.py或间接通过 crontab (例如 0 0 * * * /full/path/to/script.py )然后它会正常执行(没有错误)。但是当它通过 fcrontab 为相同的 $USER (具有相同的作业 0 0 * * * /full/path/to/script.py )执行时,Python 3.5.2 会引发异常:

Traceback (most recent call last):
  File "/full/path/to/script.py", line 4, in <module>
    print(b.decode('utf-8')) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

这怎么可能?为什么 Python 尝试将字节解码为“ascii”而不是“utf-8”?

最佳答案

感谢 Daniel Voina 找到了解决方案。

问题是由于 fcron 的语言环境:它将默认语言环境替换为 POSIX,因此 Python 无法将 unicode 写入 stdout/stderr。 This thread描述了此问题的解决方案:只需在 fcrontab -e 顶部添加行 LC_ALL=en_US.UTF-8 (或其他区域设置),现在脚本执行时无需I/O 错误。

fcrontab -l 示例:

LC_ALL=en_US.UTF-8
LC_TIME=ru_RU.UTF-8
0 0 * * * /full/path/to/script.py

关于python - 为什么Python3解释器仅在通过fcron执行时才会引发UnicodeEncodeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39524764/

相关文章:

python - 与反向函数和 kwargs 有关的问题

python - 在 apache spark/Storm 中运行 python 脚本

带有 Selenium 的 Python Urllib2 Cookiejar

python-3.x - 如何声明返回对象数组的函数?

Android比较UTF-8字符串与UTF-8输入字符串的edittext

python - 无法让 Google App Engine OAuth2-sample(适用于 Python)工作 - 400 错误 : redirect_uri_mismatch

python - 类型错误 : takes 0 positional arguments but 1 was given

python - 如何填充python中几条曲线之间的区域?

javascript - 编辑器是 utf8,javascript 规范需要 utf16

linux - 如何检查区域设置是否为 UTF-8?