Python调用AppleScript App传递参数异常问题求助
首先,你遇到的hellocurrent application问题,根源在于AppleScript应用接收参数的方式不对,以及你调用app的方式不符合macOS GUI应用的参数传递规范,具体原因和解决方法如下:
为什么会显示hellocurrent application?
当你直接调用AppleScript app包内的Contents/MacOS/applet二进制文件时,并没有遵循macOS GUI应用的启动流程,导致AppleScript的run argv handler无法正确捕获你传入的参数。此时argv变量并没有拿到你传递的参数,反而指向了current application这个AppleScript内置对象——当你把这个对象和字符串hello拼接时,AppleScript会自动将其转为字符串current application,于是就出现了hellocurrent application的结果。
另外,你的Python代码里还有一个小问题:[" Heello"]前面带空格,这会导致这个参数被识别为一个开头带空格的独立参数,不是正确的参数拆分方式,应该写成["Heello"](去掉前置空格)。
正确的解决方法
要给AppleScript GUI应用传递参数,macOS的标准方式是使用open命令,通过--args选项来传递参数。同时,AppleScript里需要正确处理argv列表(因为它是一个列表,直接拼接会显示列表格式,而不是空格分隔的字符串)。
步骤1:调整Python调用代码
把原来直接调用applet二进制的方式,改成用open命令启动你的AppleScript app并传递参数:
import subprocess import shlex # 用open命令传递参数给AppleScript应用 cmd = 'open -a "/Users/user/Documents/Scripts/Parameters.app" --args -Profile /Volumes/MM/FF Heello' FFProcess = subprocess.Popen(shlex.split(cmd))
步骤2:修正AppleScript代码
argv是一个参数列表,直接和字符串拼接会显示列表的原始格式(比如hello{-Profile, /Volumes/MM/FF, Heello}),我们需要把列表转成空格分隔的字符串:
on run argv -- 将参数列表转为空格分隔的字符串 set argsText to (argv as text) display dialog "hello " & argsText end run
如果需要更精细的控制(比如自定义分隔符),也可以用循环拼接:
on run argv set argsString to "" repeat with arg in argv set argsString to argsString & space & arg end repeat -- 去掉开头的空格 set argsString to text 2 thru -1 of argsString display dialog "hello " & argsString end run
验证效果
运行调整后的Python代码,AppleScript应用会弹出对话框,显示你预期的hello -Profile /Volumes/MM/FF Heello。
内容的提问来源于stack exchange,提问作者Musique

