You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyFilesystem无法找到tar-fs中的现有文件,附VSCode下载提取脚本

解决PyFilesystem TarFS无法识别已下载tar文件的问题

我看了你这段下载并提取VSCode的脚本,遇到TarFS找不到文件的问题,大概率是下载环节的数据流处理不完整,或者TarFS读取时的指针位置不对导致的。咱们一步步来修复:

核心问题分析

  1. 你代码里的shutil.copyfileobj(...)是未完成的调用,根本没把下载的数据流写入BytesIO,这会导致TarFS读取空数据;
  2. 就算完成了写入,BytesIO的指针会停在数据流末尾,TarFS从这个位置读自然找不到任何内容;
  3. ~/Downloads/VSCode里的波浪号如果不展开成绝对路径,PyFilesystem可能无法正确识别目标路径。

修复后的完整脚本

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

# 展开波浪号为绝对路径,避免路径识别异常
target_install_path = os.path.expanduser("~/Downloads/VSCode")
dl_link = "https://go.microsoft.com/fwlink/?LinkID=620884"

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

tar_data = BytesIO()
print("Downloading Data")
# 将响应的原始流完整写入BytesIO
shutil.copyfileobj(r.raw, tar_data)

# 关键操作:把BytesIO的指针移到开头,否则TarFS会从末尾开始读
tar_data.seek(0)

print("Extracting Files")
# 初始化TarFS并提取内容
with TarFS(tar_data) as tar_fs:
    # 确保目标目录存在,不存在则创建
    os.makedirs(target_install_path, exist_ok=True)
    # 复制tar包内的所有文件到目标路径
    copy_fs(tar_fs, target_install_path)

print(f"VSCode extracted to {target_install_path} successfully!")

关键修复点说明

  • 路径展开:用os.path.expanduser处理带~的路径,转换成当前用户主目录的绝对路径,避免PyFilesystem对相对路径的解析错误;
  • 完整写入数据流:shutil.copyfileobj(r.raw, tar_data)把请求返回的原始二进制流完整写入BytesIO,这是下载环节的核心;
  • 重置文件指针:下载完成后,BytesIO的指针会停在数据末尾,tar_data.seek(0)将指针移到开头,让TarFS能正确读取整个tar包内容,这是解决“找不到文件”问题的关键;
  • 提前创建目标目录:os.makedirs(..., exist_ok=True)确保提取路径存在,避免复制时因目录不存在抛出异常。

额外排查建议

如果运行后还是有问题,可以试试这两步排查:

  • 把BytesIO的内容写入本地文件,验证tar包完整性:
    with open("vscode.tar.gz", "wb") as f:
        f.write(tar_data.getvalue())
    
    然后用tar -tvf vscode.tar.gz命令查看是否能列出文件,确认下载的是有效tar包;
  • 在TarFS的with块里添加文件列表打印,确认TarFS能读取到内容:
    with TarFS(tar_data) as tar_fs:
        print("Files in tar包:", list(tar_fs.walk.files()))
        # 后续复制代码...
    

内容的提问来源于stack exchange,提问作者Uzaku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:28:11