在Django项目中调用SpotDL时如何传递--bitrate等命令参数?
在Django中调用SpotDL时传递自定义命令行参数
问题背景
基于SpotDL开发Django项目,现有代码通过subprocess调用SpotDL可成功下载曲目,但尝试添加--bitrate等自定义参数时失败,需要解决如何正确传递这类命令行参数的问题。
现有核心代码:
urls.py
urlpatterns = [ path('admins/', admin.site.urls), path('spdl/', views.spdl), ]
views.py
def spdl(request): import spotdl spotify_url = "https://open.spotify.com/track/2Cd9iWfcOpGDHLz6tVA3G4" subprocess.run(['spotdl', spotify_url], check=True) return HttpResponse("downloaded")
解决方案
方案1:修正subprocess参数传递方式
你尝试的参数格式本身合规,失败大概率是参数取值不合法或路径问题,以下是标准的参数传递示例:
传递--bitrate参数
def spdl(request): import subprocess spotify_url = "https://open.spotify.com/track/2Cd9iWfcOpGDHLz6tVA3G4" # 确保bitrate为SpotDL支持的有效值(如128、256、320) subprocess.run(['spotdl', '--bitrate', '128', spotify_url], check=True) return HttpResponse("downloaded")
传递--cookie-file参数
需使用绝对路径确保Django进程能访问到cookie文件,避免相对路径导致的文件找不到问题:
import os from django.conf import settings def spdl(request): import subprocess spotify_url = "https://open.spotify.com/track/2Cd9iWfcOpGDHLz6tVA3G4" # 拼接项目根目录下的cookies.txt绝对路径 cookie_path = os.path.join(settings.BASE_DIR, 'cookies.txt') subprocess.run(['spotdl', '--cookie-file', cookie_path, spotify_url], check=True) return HttpResponse("downloaded")
方案2:直接使用SpotDL的Python API(更推荐)
既然已经在代码中import spotdl,直接调用其Python API比subprocess更优雅,也更便于调试和参数配置:
from spotdl import Spotdl from django.conf import settings import os def spdl(request): # 初始化SpotDL客户端,配置自定义参数 spotdl_client = Spotdl( bitrate="128", cookie_file=os.path.join(settings.BASE_DIR, 'cookies.txt') ) spotify_url = "https://open.spotify.com/track/2Cd9iWfcOpGDHLz6tVA3G4" # 执行下载 spotdl_client.download([spotify_url]) return HttpResponse("downloaded")
注意事项
bitrate参数需使用SpotDL支持的有效值,通常为128、256、320,使用无效值会导致报错。- 涉及文件路径的参数(如
cookie-file)务必使用绝对路径,避免因Django运行时的工作目录不同导致文件找不到。 - 使用
subprocess时,确保spotdl命令在Django进程的环境变量PATH中,或直接使用spotdl的绝对路径(如/usr/local/bin/spotdl)调用。
内容的提问来源于stack exchange,提问作者Vijay Prajapati
相关产品推荐
相关产品推荐

