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
相关产品推荐
相关产品推荐

