我正在尝试在嵌入的 applescript 中使用 python 文件中定义的变量。我希望将 currentpath 中的路径附加到我在 osascript 语句中提到的变量的位置。
我已经尝试了链接和其他一些链接中给出的所有方法,但没有一个起作用:Pass variable into AppleScript from python
import os
import sys
currentpath = os.path.dirname(sys.argv[0])
com = ("""osascript -e 'tell application "Terminal" to do script "afplay {0}/Sounds/storm-9s.mp3"'""".format(currentpath))
os.system(com)
所有的技巧都会导致我遇到同样的错误,而且我不确定问题是否出在我的 python 代码或 applescript 上。
A94HDBSGHHHD:~ user$ afplay /Sounds/storm-9s.mp3
Unspecified exception
A94HDBSGHHHD:~ user$
更新:我的应用程序需要同时播放多个声音文件。使用子进程需要我的脚本对声音文件进行管道传输,并仅在第一个文件完全播放时才播放第二个文件。因此我必须启动多个终端才能一起播放声音。 例如我的代码播放 a.mp3,然后在完成播放之前,我的代码决定播放 b.mp3。因此,它应该开始播放 b.mp3,而不停止 a.mp3,并同时播放它们,直到文件结束时 a.mp3 停止,然后文件播放完毕时 b.mp3 停止。
最佳答案
首先,解决这个问题的最佳方法是完全避免 AppleScript 并直接从 python 运行“afplay”命令。如果您阅读了这两个 Stack Overflow 问题:
您会发现您应该能够使用 popen
同时运行这些声音文件。
如果您确实想要 AppleScript 解决方案,那么我建议您忘记编写终端脚本,而使用 do shell script
代替。这与直接从 AppleScript 运行 shell 命令基本相同,没有 Terminal.app 的开销。看起来像这样:
com = """osascript -e 'do shell script "afplay {0}/Sounds/storm-9s.mp3 &> /dev/null &"'""".format(currentpath)
或者如果你想要冒险,你可以将它们全部链接在一起,如下所示:
com = """osascript -e 'do shell script "afplay {0}/Sounds/storm-9s.mp3 &> /dev/null &"' -e 'do shell script "afplay {1}/Sounds/storm-9s.mp3 &> /dev/null &"'""".format(path0, path1)
假设当前路径(path0/path1)给出了正确的前缀,这应该可以工作; &>/dev/null &
位告诉 do shell script
分离进程并立即返回。但这又是迂回的:你告诉 python 告诉 shell 告诉 AppleScript 告诉 shell 做某事,而每一次额外的上下文转换都会产生出错的机会。
关于python - 使用 applescript 使用 Python 文件中定义的路径变量更改目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101312/