pythontarfile.py文件“无法成功打开文件”

2024-06-16 13:54:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个无法使用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)以八个空格的形式出现。不知道从这里到哪里去。。。在


Tags: inimportlinenotbeopenfilecould
1条回答
网友
1楼 · 发布于 2024-06-16 13:54:23

老实说,这个bug似乎在tarfile.pynti函数中:

n = int(nts(s) or "0", 8)

失败逻辑(or "0")不起作用,因为s是空格,而不是{},所以int()爆炸了。在

我从/var/lib/python2.7/复制了tarfile.py,并用try/catch包装了这一行,这使我得到了修复:

^{pr2}$

不过,这是一个黑客解决方案。实际上,我更希望python的人看看它并修复“or "0"逻辑。在

更新

原来tarball是由刚刚升级到java7的java6项目中的maven-assembly-plugin创建的。通过将maven-assembly-plugin升级到2.5.3解决了该问题。在

相关问题 更多 >