我在 Ubuntu 环境中的 tarfile 包遇到了一个有趣的问题。我在 /tmp/ 文件夹中有 jdk 包 (jdk-7u5-linux-x64.tar.gz) 和另一个包 (blah.tar.gz)。两者都可以(这意味着我可以通过右键单击它们来提取它们)。使用 blah.tar.gz 包,我使用流动代码:
import tarfile
tar = tarfile.open('/tmp/blah.tar.gz', 'r:gz')
tar.extractall()
tar.close()
它运作良好。但是,当我尝试使用 jdk 包时( tar = tarfile.open('/tmp/jdk-7u5-linux-x64.tar.gz', 'r:gz') )。我收到以下错误:
In [26]: tar.extractall()
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
/home/bubuzzz/Projects/secude/java/jdk/<ipython console> in <module>()
/usr/lib/python2.7/tarfile.pyc in extractall(self, path, members)
2044 tarinfo = copy.copy(tarinfo)
2045 tarinfo.mode = 0700
-> 2046 self.extract(tarinfo, path)
2047
2048 # Reverse sort directories.
/usr/lib/python2.7/tarfile.pyc in extract(self, member, path)
2081
2082 try:
-> 2083 self._extract_member(tarinfo, os.path.join(path, tarinfo.name))
2084 except EnvironmentError, e:
2085 if self.errorlevel > 0:
/usr/lib/python2.7/tarfile.pyc in _extract_member(self, tarinfo, targetpath)
2165 self.makedev(tarinfo, targetpath)
2166 elif tarinfo.islnk() or tarinfo.issym():
-> 2167 self.makelink(tarinfo, targetpath)
2168 elif tarinfo.type not in SUPPORTED_TYPES:
2169 self.makeunknown(tarinfo, targetpath)
/usr/lib/python2.7/tarfile.pyc in makelink(self, tarinfo, targetpath)
2240 # For systems that support symbolic and hard links.
2241 if tarinfo.issym():
-> 2242 os.symlink(tarinfo.linkname, targetpath)
2243 else:
2244 # See extract().
OSError: [Errno 17] File exists
我仍然不知道这里出了什么问题。因为当我将 jdk 包移动到另一个文件夹并使用该代码时,它再次运行良好。在运行代码之前,“tmp”文件夹是空的。有谁知道如何解决这个问题?