我有一个无法使用python打开的tarball:
>>> import tarfile
>>> tarfile.open('/tmp/bad.tar.gz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "tarfile.py", line 1672, in open
raise ReadError("file could not be opened successfully")
tarfile.ReadError: file could not be opened successfully
但是我可以在命令行上毫无问题地提取文件。在
^{pr2}$我跟踪了pythontarfile
代码,其中有一个函数“nti
”,它们在其中转换字节。到了这一行:
obj.uid = nti(buf[108:116])
然后爆炸。这些位(用于UID)以八个空格的形式出现。不知道从这里到哪里去。。。在
老实说,这个bug似乎在
tarfile.py
的nti
函数中:失败逻辑(},所以
or "0"
)不起作用,因为s
是空格,而不是{int()
爆炸了。在我从
^{pr2}$/var/lib/python2.7/
复制了tarfile.py
,并用try/catch包装了这一行,这使我得到了修复:不过,这是一个黑客解决方案。实际上,我更希望python的人看看它并修复“
or "0"
逻辑。在更新
原来tarball是由刚刚升级到java7的java6项目中的
maven-assembly-plugin
创建的。通过将maven-assembly-plugin
升级到2.5.3
解决了该问题。在相关问题 更多 >
编程相关推荐