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.4ID3です]

[また、完全に公平を期すために、エラーの原因がよろめきであるかどうかは明らかではありません。同じ値を返している可能性がありますが、Pythonは2つの場合で異なる方法で処理します。]

4

1 に答える 1

2

LANG環境変数の値の違いが原因である可能性があります。詳細はこちらの記事をご覧ください。

于 2013-03-07T19:59:29.700 に答える