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

如何在Python中获取AppleScript对话框的按钮响应?

解决Mac上Python结合AppleScript自定义按钮对话框的返回值问题

问题原因

os.system()只能获取AppleScript的退出码,当使用自定义按钮(非默认OK/Cancel)时,无论点击哪个自定义按钮,AppleScript的退出码都是0,无法区分用户操作。自定义按钮的选择结果会通过标准输出返回,而非退出码。

解决方法:使用subprocess捕获输出

改用subprocess.run()或subprocess.check_output()执行AppleScript命令,捕获并解析标准输出内容,判断用户点击的按钮。

示例代码

import subprocess

def show_custom_dialog(body):
    # 转义body中的双引号,避免AppleScript语法错误
    escaped_body = body.replace('"', '\\"')
    # 构造AppleScript命令,定义自定义按钮
    applescript = f'Tell application "System Events" to display dialog "{escaped_body}" buttons {{"Audio", "Video"}} default button 1'
    
    try:
        # 执行命令并捕获输出
        result = subprocess.run(
            ['osascript', '-e', applescript],
            capture_output=True,
            text=True,
            check=True
        )
        # AppleScript返回格式为 "button returned:按钮名称"
        output = result.stdout.strip()
        if "Audio" in output:
            return "Audio"
        elif "Video" in output:
            return "Video"
    except subprocess.CalledProcessError:
        # 用户点击了取消(若对话框有取消按钮)或关闭了对话框
        return "Cancel"

# 调用示例
selected = show_custom_dialog("请选择媒体类型")
print(f"用户选择了: {selected}")

代码说明

  • subprocess.run()的capture_output=True用于捕获标准输出和错误输出,text=True让输出以字符串形式返回,避免字节处理。
  • check=True会在AppleScript执行失败(比如用户按Esc关闭对话框)时抛出CalledProcessError,方便捕获取消操作。
  • 对body中的双引号进行转义,防止AppleScript命令因语法错误执行失败。

额外提示

如果需要添加取消按钮,可以修改AppleScript的buttons参数为{"Audio", "Video", "Cancel"},此时用户点击Cancel会触发CalledProcessError,对应返回的"Cancel"结果。

内容的提问来源于stack exchange,提问作者Alfie Stoppani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:45:34