2

Python スクレーパー/スパイダーで作業していて、IOError というタイトルの文字制限を超える URL に遭遇しました。httplib2 を使用して URL を取得しようとすると、ファイル名が長すぎるというエラーが表示されます。私は Dropbox を使用しているので、すべてのプロジェクトをホーム ディレクトリ内に置くことを好みます。とにかく、この問題について、または家の外で作業ディレクトリをセットアップする必要がありますか?

4

3 に答える 3

6

ファイル名に最大 143 文字を許可する暗号化ファイル システムの制限に達している可能性があります。

バグは次のとおりです: https://bugs.launchpad.net/ecryptfs/+bug/344878

現時点での解決策は、暗号化されたホーム ディレクトリ以外のディレクトリを使用することです。これを再確認するには:

mount | grep ecryptfs

ホームディレクトリがリストされているかどうかを確認します。その場合は、ホームの上の他のディレクトリを使用するか、暗号化を使用せずに新しいホーム ディレクトリを作成します。

于 2013-05-08T19:16:50.980 に答える
2

どうやらコンストラクターに渡し'.cache'たように、httplib.Httpこれをより適切なものに変更するか、キャッシュを無効にする必要があります。

于 2013-02-15T00:58:19.373 に答える
2

で始まるファイル名が長すぎるという事実が'.cache/www.example.com'問題を説明しています。

httplib2オプションで、作成したリクエストをキャッシュします。キャッシュを有効に.cacheし、それをキャッシュ ディレクトリとして指定しました。

簡単な解決策は、キャッシュ ディレクトリを別の場所に置くことです。

コードを見なければ、それを修正する方法を教えることは不可能です。しかし、それは些細なことであるべきです。のドキュメントは、最初のパラメーターとしてFileCachea を取ることを示しています。dir_name

または、代わりにsafe、URI からファイル名を生成できる関数を渡して、デフォルトをオーバーライドすることもできます。これにより、Ubuntu で暗号化された fs の 144 文字の制限内に収まるファイル名を生成できます。

または、代わりに、と同じインターフェースで独自のオブジェクトを作成し、それFileCacheをオブジェクトに渡してHttpキャッシュとして使用することもできます。たとえば、 を使用tempfileしてランダムなファイル名を作成し、URL からファイル名へのマッピングをanydbmまたはsqlite3データベースに保存できます。

もちろん、最終的な代替手段は、キャッシュをオフにすることです。

于 2013-02-15T00:57:44.697 に答える