我编写了一个下载和解压缩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
发布于 2018-04-16 12:19:58
这是PyFilesystem库中的一个bug,详细信息请参阅:https://github.com/PyFilesystem/pyfilesystem2/issues/160
https://stackoverflow.com/questions/49811622
复制相似问题