使用此代码
import os
with open('urls.txt') as f:
for line in f:
os.system("youtube-dl "+"--write-thumbnail "+"--skip-download "+"--yes-playlist " +line)
播放列表中的第一张图片下载,然后我收到一条错误消息,上面写着' list'不被识别为内部或外部命令,可操作程序或批处理文件。在' urls.txt'我只有一个Youtube播放列表的网址。网址是这样的:
https://www.youtube.com/watch?v=GA3St3Rf9Gs&list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm
在& amp;&;符号。如果我更换' list'在' foo'的网址中我收到同样的消息。如何让youtube-dl接受播放列表网址?
答案 0 :(得分:0)
您可以直接在脚本中使用youtube_dl
库并传递要从中下载的网址。
import os
import youtube_dl
ydl_opts = {
'writethumbnail': True,
'skip_download': True,
'noplaylist': False
}
with open('urls.txt') as f:
sources = f.readlines()
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(sources)
答案 1 :(得分:0)
您的计划有一个专业command injection security vulnerability。你偶然触发了这个(无害的代码)。你正在执行
youtube-dl --write-thumbnail --skip-download --yes-playlist \
https://www.youtube.com/watch?v=GA3St3Rf9Gs&list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm
由于&符是command character in shell scripts,您正在运行两个命令
youtube-dl --write-thumbnail --skip-download --yes-playlist \
https://www.youtube.com/watch?v=GA3St3Rf9Gs
和
list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm
由于没有具有该名称的程序,第二个命令可能会失败。
要解决此问题,请使用subprocess正确的子进程调用:
import subprocess
with open('urls.txt') as f:
for line in f:
subprocess.check_call([
"youtube-dl",
"--write-thumbnail", "--skip-download", "--yes-playlist",
line])
答案 2 :(得分:0)
在commandprompt中,您只需要引用url(带有&符号)。您可以尝试在python中以相同的方式转义URL(带有&符号)。请参阅youtube-dl FAQ