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

Garuda Linux下fish运行Python YouTube下载脚本报错如何解决

问题原因
  • 核心触发错误来自fish shell的通配符展开规则:未被引号包裹的字符串中的?会被fish识别为通配符,尝试匹配当前目录下的对应文件,匹配失败就会抛出No matches for wildcard错误,直接终止命令执行。你传入的YouTube链接包含?v=参数,未加引号就会触发该规则。
  • 附带的Unknown command: uname报错来自fish的done插件(命令执行完成提示插件),该插件在fish_preexec事件触发时调用uname命令判断系统环境,要么是你的PATH环境变量异常找不到uname,要么是插件没有写uname的绝对路径导致执行失败。
解决方案

通配符报错解决

  • 临时方案:每次执行命令时用单引号/双引号包裹链接,示例:
    download 'https://www.youtube.com/watch?v=gjwTHJbpJyk'
    
  • 永久方案:给自定义download命令配置参数不做通配符展开,在~/.config/fish/config.fish中添加如下配置即可,后续不需要再给链接加引号:
    complete -c download -x
    

uname报错解决

如果通配符问题修复后仍然弹出该报错,二选一处理即可:

  • 方案1:运行which uname拿到uname命令的绝对路径,通常为/usr/bin/uname,编辑~/.config/fish/conf.d/done.fish第90行,把uname -a替换为你拿到的绝对路径
  • 方案2:如果你不需要done插件的命令执行完成提示功能,直接删除~/.config/fish/conf.d/done.fish文件即可
额外脚本优化建议

你的现有脚本存在逻辑冗余问题:循环遍历所有参数但每次都固定取第一个参数sys.argv[1],还会无意义遍历到sys.argv[0](脚本自身路径),可以修改为如下版本:

#!/usr/bin/env python
import sys
from pytube import YouTube

# 跳过脚本自身路径,遍历所有传入的链接
for url in sys.argv[1:]:
    video = YouTube(url)
    video.streams.get_by_itag(18).download("/home/gabrielz/Downloads/")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:54:00