Rya*_*yan 9 macos shell applescript
这是我的文件:
launcher.applescript
tell application ":path:to:applescript:apps:shell-script-launcher.app" to launch
Run Code Online (Sandbox Code Playgroud)
shell-script-launcher.app [AppleScript,保存为应用程序]
do shell script "say starting script"
Run Code Online (Sandbox Code Playgroud)
期望的行为:
实际行为:
我已经尝试将应用程序保存为"仅运行"以及"保持打开".仍然没有进展.您有什么推荐的吗.最终结果必须是应用程序而不是Applescript.
mkl*_*nt0 16
run
命令启动并运行隐藏的应用程序activate
命令启动,运行和激活应用程序(使其成为最前面的应用程序)launch
,根据苹果 "启动一个应用程序,如果是尚未运行,但不发送运行命令."
on run
处理程序未被调用),但实际上在10.9之前并非如此 - 见下文.脚本可以将命令发送到脚本应用程序,就像它可以发送到其他应用程序一样.要启动非逗留打开的应用程序并运行其脚本,请使用启动命令,然后运行run命令,如下所示:
launch application "NonStayOpen"
run application "NonStayOpen"
launch命令启动脚本应用程序而不向其发送隐式运行命令.当run命令发送到脚本应用程序时,它会处理命令,必要时发回回复,然后退出.
launch
本身足以运行应用程序,并且确实是唯一适用于基于AppleScript的应用程序的命令.任何执行尝试run
或activate
(无论是否添加launch
)都会运行应用程序 -从AppleScript编辑器运行时甚至两次(!;只运行一次osascript
) - 但报告失败<appName> got an error: Connection is invalid
.
这让我感到害怕.
不确定OSX版本<= 10.7的行为.
注意:我已经见过launch
一次非执行行为,但是我在OS X 10.9.2和OS X 10.8.5上从头开始创建的每个非停留打开的基于AppleScript的测试应用程序也执行脚本launch
-与文档所说的相矛盾.
如果您的系统行为不同和/或旧版本的行为方式,请告知我们.在什么OSX版本的应用程序不执行launch
创建?
在OSX 10.10上,行为与文档一致,有一点值得注意:
run application
就足够了 - launch application
首先不需要单独的命令.do shell script
标准open
实用程序来绕过问题 - 无论应用程序是否基于AppleScript,这都应该有效:do shell script "open " & ¬
quoted form of POSIX path of ¬
alias ":path:to:applescript:apps:shell-script-launcher.app"
Run Code Online (Sandbox Code Playgroud)
如果你知道你正在调用的应用程序类型:
run script file
,正如@ regulus6633建议的那样 - 这具有额外的优势,即调用的基于AppleScript的应用程序可以直接将对象返回给调用者:run script file ":path:to:applescript:apps:shell-script-launcher.app"
Run Code Online (Sandbox Code Playgroud)
注意:还有load script file
,它确实只允许您加载脚本代码而不立即执行它.
run
/ activate
运行隐藏/最前端的应用程序:run application ":path:to:applescript:apps:shell-script-launcher.app"
Run Code Online (Sandbox Code Playgroud)
run
基于AppleScript的应用程序,甚至,只是忽略错误使用try ... end try
,如@atonus建议-的缺点是,你将无法检测实际故障调用应用程序.您可以通过有选择地仅忽略特定Connection invalid
错误(假设不会合法地发生此错误)来缓解这种情况[OSX 10.10上不再需要]:
try
run application "Macintosh HD:Applications:_Sandbox-AppleScript0.app"
on error number -609 # 'Connection is invalid' error that is spuriously reported
# simply ignore
end try
Run Code Online (Sandbox Code Playgroud)
launch
命令(虽然这对OP不起作用,可能是由于处理<= 10.7 OSX版本): launch application ":path:to:applescript:apps:shell-script-launcher.app"
Run Code Online (Sandbox Code Playgroud)
但是,出于以下两个原因,这是不可取的:
launch
行为修复为不再执行,因此您的代码在运行时会中断.launch
,但文档说 AppleScript"不向它发送运行命令"并且"允许您打开应用程序而不执行其通常的启动过程,例如打开一个新窗口" - 这究竟意味着什么并不清楚,不同的应用程序似乎对此有不同的处理方式. 归档时间: |
|
查看次数: |
32962 次 |
最近记录: |