【问题标题】:PyFilesystem can't find existing file in tar-fsPyFilesystem 在 tar-fs 中找不到现有文件
【发布时间】:2018-04-13 07:32:27
【问题描述】:

我写了一个小脚本来下载和解压 VSCode:

#!/usr/bin/env python
import requests
import shutil
from io import BytesIO
from fs.tarfs import TarFS
from fs.copy import copy_fs

target_install_path = "~/Downloads/VSCode"
dl_link = "https://go.microsoft.com/fwlink/?LinkID=620884"

print("Sending Requests")
r = requests.get(dl_link, stream=True)
if not r.status_code == 200:
    print("Error, status code: ", r.status_code)
    exit()

tar_data = BytesIO()
print("Downloading Data")
shutil.copyfileobj(r.raw, tar_data)
tar_data.seek(0)
tar_fs = TarFS(tar_data)
print("Extracting")
copy_fs(tar_fs, target_install_path)

问题是,在执行过程中出现以下错误:

Traceback (most recent call last):
  File "~/miniconda3/lib/python3.6/site-packages/fs/tarfs.py", line 259, in getinfo
    member = self._tar.getmember(self._encode(_path))
  File "/~/miniconda3/lib/python3.6/tarfile.py", line 1749, in getmember
    raise KeyError("filename %r not found" % name)
KeyError: "filename 'VSCode-linux-x64/resources/app/extensions/typescript-language-features/node_modules/diagnostic-channel' not found"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./update_vscode", line 23, in <module>
    copy_fs(tar_fs, target_install_path)
  File "~/miniconda3/lib/python3.6/site-packages/fs/copy.py", line 31, in copy_fs
    walker=walker, on_copy=on_copy)
  File "~/miniconda3/lib/python3.6/site-packages/fs/copy.py", line 225, in copy_dir
    for dir_path, dirs, files in walker.walk(src_fs, _src_path):
  File "~/miniconda3/lib/python3.6/site-packages/fs/walk.py", line 269, in walk
    for dir_path, info in _walk:
  File "~/miniconda3/lib/python3.6/site-packages/fs/walk.py", line 340, in _walk_breadth
    for info in self._scan(fs, dir_path, namespaces=namespaces):
  File "~/miniconda3/lib/python3.6/site-packages/fs/walk.py", line 236, in _scan
    six.reraise(type(error), error)
  File "~/miniconda3/lib/python3.6/site-packages/six.py", line 685, in reraise
    raise value.with_traceback(tb)
fs.errors.ResourceNotFound: resource '/VSCode-linux-x64/resources/app/extensions/typescript-language-features/node_modules/diagnostic-channel' not found

如果我将 r.raw 复制到磁盘上的文件对象,然后使用 tar 将其解压缩,则 fs_copy 找不到的文件在其中。

有人知道问题可能是什么吗? 我使用 python 3.6 和 fs 2.0.20

【问题讨论】:

    标签: python-3.x tar


    【解决方案1】:

    这是 PyFilesystem 库中的一个错误,详情请参阅:https://github.com/PyFilesystem/pyfilesystem2/issues/160

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 2012-12-22
      • 2015-02-21
      • 2011-10-28
      • 2016-05-14
      • 2015-12-05
      • 2012-10-31
      • 1970-01-01
      相关资源
      最近更新 更多