如何在 python 中获取 AppleScript 对话框的响应?



我正在尝试使用python创建一个对话框提示,其中包含使用AppleScript的Mac按钮。

使用带有"确定"和"取消"的常规对话框,我一直在简单地r = os.system("osascript -e 'Tell application "System Events" to display dialog ""+body+""'")因为r == 0是否按下"确定",如果按下"取消"r == 256

但现在我想要按钮。我尝试了r = os.system("osascript -e 'Tell application "System Events" to display dialog "Would you like do download audio or video?" buttons {"Audio", "Video"}'")但是如果单击两个按钮,两个按钮都会返回r == 0

我尝试根据在线的一些示例使用subprocess.Popen(),但是由于我不太了解它而遇到错误。我在网上找不到像我正在使用的那样使用AppleScript的示例。

谁能指出我如何做到这一点的正确方向?

经验答案如下...

尝试直接在终端中运行osascript命令,而不是通过Python及其subprocess模块。然后,您可以检查退出状态以及stdoutstderr的输出,以便您知道在Python中查找的位置。


所以,首先让我们看看退出状态,只需使用终端:

osascript -e "SOMETHING"
echo $?

打印的值将与Pythonsubprocess的退出状态匹配,因此请尝试单击不同的按钮,看看你得到了什么。


接下来,看看stdoutstderr。因此,再次运行osascript命令,但将stdout重定向到名为stdout.txt的文件,并将stderr重定向到名为stderr.txt的文件:

osascript -e "SOMETHING" > stdout.txt 2> stderr.txt

在对话框中选择不同的选项并按不同的按钮运行几次,但在每次使用后检查stdout.txtstderr.txt的内容:

cat stdout.txt
cat stderr.txt

当你知道你想要的输出是处于退出状态,还是在stdoutstderr时,你就会知道在Python中寻找什么。

Shell 命令将其结果发送到标准输出或标准错误。 AppleScript 的display dialog返回一条记录(例如{button returned: "OK"}),shell 返回文本表示。 您可以整理返回的文本以获取按钮标题,或者只是让 AppleScript 返回所需的记录键,例如:

import os
r = os.system("osascript -e 'tell application "System Events" to return button returned of (display dialog "Would you like do download audio or video?" buttons {"Audio", "Video"})'")

请注意,目前不建议使用os.system。 我没有当前的 Python 安装,但要使用子进程,它将是这样的:

import subprocess
script = 'tell application "System Events" to return button returned of (display dialog "Would you like to download audio or video?" buttons {"Audio", "Video"})'
result = subprocess.check_output(['osascript', '-e', script], text = True)
print(result)

最新更新