使用在Python fi中定义的路径变量使用applescript更改目录

2024-10-01 02:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在嵌入的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$

更新:我的应用程序需要同时播放多个声音文件。使用子进程需要我的脚本通过管道传输声音文件,并且仅当第一个文件完全播放时才播放第二个文件。因此,我必须启动多个终端一起播放声音。 e、 我的代码播放a.mp3,然后在它完成播放之前,我的代码决定播放b.mp3。因此,它应该在不停止a.mp3的情况下开始播放b.mp3,并同时播放它们,直到a.mp3在文件结束时停止播放,然后b.mp3在文件播放结束时停止播放。你知道吗


Tags: 文件代码importcomos链接sysmp3
1条回答
网友
1楼 · 发布于 2024-10-01 02:18:46

首先,解决这个问题的最佳方法是完全避免AppleScript,直接从python运行“afplay”命令。如果您阅读了以下两个堆栈溢出问题:

您将看到您应该能够使用popen同时运行这些声音文件。你知道吗

如果您真的需要AppleScript解决方案,那么我建议您忘记编写终端脚本,改用do shell script。这与直接从AppleScript运行shell命令基本相同,没有打开终端. 看起来是这样的:

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)

假设currentpath(path0/path1)给出了正确的前缀,这应该可以工作;&> /dev/null &位告诉do shell script分离进程并立即返回。但这又是一个迂回的过程:你让python告诉shell让AppleScript告诉shell做某事,每一次额外的上下文转换都会为出错创造机会。你知道吗

相关问题 更多 >