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」フォルダーは空でした。この問題を解決する方法を知っている人はいますか?