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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:17:45