gpt4 book ai didi

Python Subprocess call() 不执行shell命令

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:29 25 4
gpt4 key购买 nike

我正在尝试制作一个 python 程序(python 3.6),将命令写入终端以下载特定的 youtube 视频(使用 youtube-dl)。

如果我进入终端并执行以下命令:

cd; cd Desktop; youtube-dl "https://www.youtube.com/watch?v=b91ovTKCZGU"

它将把视频下载到我的 table ​​面上。但是,如果我执行下面的代码(应该在终端上执行相同的命令),它不会抛出错误,但也不会下载该视频。

import subprocess                
cmd = ["cd;", "cd", "Desktop;", "youtube-dl", "\"https://www.youtube.com/watch?v=b91ovTKCZGU\""]
print(subprocess.call(cmd, stderr=subprocess.STDOUT,shell=True))

看起来这只是输出0。我不认为存在任何类型的错误0(有错误126和127)。那么,如果它没有抛出错误,为什么它也不下载视频?

更新:我通过传入一个字符串修复了上面的代码,并检查了 youtube-dl 是否安装在我的默认 python 中,并且也在我想要下载视频的文件夹中,但它仍然抛出错误 127,意思是命令“youtube -dl”未找到。

最佳答案

cd;光盘桌面; youtube-dl "https://www.youtube.com/watch?v=b91ovTKCZGU" 不是单个命令;它是三个独立命令的列表(由;分隔)。

subprocess.call(cmd, ..., shell=True) 实际上与

相同
subprocess.call(['sh', '-c'] + cmd)

这几乎不是你想要的。相反,只需传递一个字符串并让 shell 解析它。

subprocess.call('cd; cd Desktop; youtube-dl "https://www.youtube.com/watch?v=b91ovTKCZGU"', shell=True)

如果您确实想使用列表形式(这总是一个好主意),请使用cwd参数而不是运行cd

subprocess.call(['youtube-dl', 'https://www.youtube.com/watch?v=b91ovTKCZGU'],
cwd=os.path.expanduser("~/Desktop"))

关于Python Subprocess call() 不执行shell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56893578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com