1

我有一个程序可以扫描我的 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 在这两种情况下处理它的方式不同。]

4

1 回答 1

2

这可能是由于LANG环境变量的值不同。详情请参阅这篇文章。

于 2013-03-07T19:59:29.700 回答