1

我在 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”文件夹是空的。有谁知道如何解决这个问题?

4

0 回答 0