我有一个程序可以扫描我的 mp3 并创建一个信息数据库。源代码在github 上。
当我从命令行运行update.sh脚本时,它工作正常。当我将它作为 cron 作业运行时,我会看到如下错误(确切的代码会有所不同):
'utf-8' 编解码器无法对位置 37 中的字符 '\udce2' 进行编码:不允许代理
查看日志,我看到为曲目标题打印的数据略有不同。从命令行调用时,我看到:
DEBUG:root:delegating artist Wendy Carlos, track "Jesu, Joy of Man’s Desiring", BWV 147 No. 10 to finder
但是当从 cron 运行时,我看到:
DEBUG:root:delegating artist Wendy Carlos, track "Jesu, Joy of Man\u2019s Desiring", BWV 147 No. 10 to finder
在这两种情况下,“track”后面的文本都是 stagger 库 (tag.title) 中的 ID3 标记。
现在stagger是一个纯 Python 库,它似乎对相同的输入给出不同的结果。因此,虽然我可以说这是一个错误,并留给他们修复,但我猜环境中的某些东西在命令行和 cron 之间有所不同。但是什么?在这两种情况下,python 都是从 virtualenv 调用的(参见上面链接的脚本)。
所以我的问题是 - 什么样的事情会导致这种情况?这不可能是魔术。必须有一个合理的解释...
[另外,在这种情况下,它是根据kid3的v2.4 ID3]
[另外,公平地说,尚不清楚是否是 Stagger 导致了错误。可能是它返回相同的值,但 python 在这两种情况下处理它的方式不同。]