rss2email
簡単に利用できるように、多数の RSS フィードをメールに変換するために使用しています。つまり、今日はひどい方法で壊れたので、私はそれを使用していました。実行するたびに、次のバックトレースのみが表示されます。
Traceback (most recent call last):
File "/usr/share/rss2email/rss2email.py", line 740, in <module>
elif action == "list": list()
File "/usr/share/rss2email/rss2email.py", line 681, in list
feeds, feedfileObject = load(lock=0)
File "/usr/share/rss2email/rss2email.py", line 422, in load
feeds = pickle.load(feedfileObject)
TypeError: ("'str' object is not callable", 'sxOYAAuyzSx0WqN3BVPjE+6pgPU', ((2009, 3, 19, 1, 19, 31, 3, 78, 0), {}))
このバックトレースから構築できた唯一の有用な事実は、すべての構成と実行時の状態~/.rss2email/feeds.dat
をrss2email
保持するファイルが何らかの形で壊れているということです。どうやら、rss2email
その状態を読み取り、実行ごとに使用してダンプしcPickle
ます。
巨大な (>12MB)ファイル'sxOYAAuyzSx0WqN3BVPjE+6pgPU'
で、上記の文字列を含む行を見つけました。feeds.dat
私の訓練されていない目には、ダンプが切り捨てられたり、破損したりしているようには見えません。
ファイルを再構築するためにどのようなアプローチを試すことができますか?
Python のバージョンは、Debian/不安定なシステムでは 2.5.4 です。
編集
Peter Gibson と JF Sebastian は、pickle ファイルから直接ロードすることを提案しており、私は以前にそれを試しました。どうやら、Feed
で定義されているクラスrss2email.py
が必要なので、ここに私のスクリプトがあります:
#!/usr/bin/python
import sys
# import pickle
import cPickle as pickle
sys.path.insert(0,"/usr/share/rss2email")
from rss2email import Feed
feedfile = open("feeds.dat", 'rb')
feeds = pickle.load(feedfile)
「プレーンな」pickle バリアントは、次のトレースバックを生成します。
Traceback (most recent call last):
File "./r2e-rescue.py", line 8, in <module>
feeds = pickle.load(feedfile)
File "/usr/lib/python2.5/pickle.py", line 1370, in load
return Unpickler(file).load()
File "/usr/lib/python2.5/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.5/pickle.py", line 1133, in load_reduce
value = func(*args)
TypeError: 'str' object is not callable
バリアントは、それ自体cPickle
を呼び出すのと本質的に同じものを生成し
ます。r2e
Traceback (most recent call last):
File "./r2e-rescue.py", line 10, in <module>
feeds = pickle.load(feedfile)
TypeError: ("'str' object is not callable", 'sxOYAAuyzSx0WqN3BVPjE+6pgPU', ((2009, 3, 19, 1, 19, 31, 3, 78, 0), {}))
編集2
私のテスト スクリプトに「printf デバッグ」を入れることに関する JF Sebastian の提案に従ってFeed.__setstate__
、これらは Python が救済される前の最後の数行です。
u'http:/com/news.ars/post/20080924-everyone-declares-victory-in-smutfree-wireless-broadband-test.html': u'http:/com/news.ars/post/20080924-everyone-declares-victory-in-smutfree-wireless-broadband-test.html'},
'to': None,
'url': 'http://arstechnica.com/'}
Traceback (most recent call last):
File "./r2e-rescue.py", line 23, in ?
feeds = pickle.load(feedfile)
TypeError: ("'str' object is not callable", 'sxOYAAuyzSx0WqN3BVPjE+6pgPU', ((2009, 3, 19, 1, 19, 31, 3, 78, 0), {}))
Python 2.4.4-2 を使用する Debian/etch ボックスでも同じことが起こります。