如何修改AppleScript应用使其支持同时处理多个yt-dlp下载URL输入
你当前的脚本是同步执行的,do shell script默认会等待命令执行完成才会返回,导致open location事件处理程序被阻塞,后续传入的URL请求就不会被响应,按照以下方案修改即可:
方案1:后台异步执行yt-dlp(最简单,直接实现多任务同时跑)
直接修改你的AppleScript代码如下:
#!/usr/bin/osascript on open location input do shell script "/usr/local/bin/yt-dlp " & quoted form of input & " > /dev/null 2>&1 &" end open location
说明:
- 末尾加
&是让shell命令在后台运行,不需要等待执行完成就立刻返回 > /dev/null 2>&1是把命令的标准输出和错误输出都丢弃,避免AppleScript等待输出返回导致阻塞。如果你需要查看yt-dlp的运行日志,可以把路径改成你指定的日志文件,比如> ~/Documents/yt-dlp-log.txt 2>&1 &- 如果你的Mac是M系列芯片,yt-dlp通过homebrew安装的话默认路径是
/opt/homebrew/bin/yt-dlp,可以在终端执行which yt-dlp确认实际路径后替换代码里的路径即可
方案2:队列执行(适合限制同时运行的yt-dlp数量,避免带宽占满)
如果不希望同时跑太多下载任务占用过多带宽,可以用队列模式,实现也很简单:
- 修改后的AppleScript代码如下:
#!/usr/bin/osascript on open location input do shell script "echo " & quoted form of input & " >> ~/.yt-dlp-queue.txt" do shell script "pgrep -f 'yt-dlp-queue-worker' || nohup /usr/local/bin/yt-dlp-queue-worker.sh > /dev/null 2>&1 &" end open location
- 新建
/usr/local/bin/yt-dlp-queue-worker.sh文件,内容如下,记得在终端执行chmod +x /usr/local/bin/yt-dlp-queue-worker.sh给执行权限:
#!/bin/zsh while [ -s ~/.yt-dlp-queue.txt ]; do # 取出队列第一行的URL url=$(head -n 1 ~/.yt-dlp-queue.txt) # 删除队列第一行 sed -i '' 1d ~/.yt-dlp-queue.txt # 执行下载 /usr/local/bin/yt-dlp "$url" done
这个方案每次只会运行一个下载任务,后续加入的URL会排队依次执行,不会同时占用过多带宽。
修改完成后重新用Script Editor导出.app覆盖原来的应用即可,不需要修改Finicky的配置。
内容的提问来源于stack exchange,提问作者Dillon
相关产品推荐
相关产品推荐

