我尝试在AppleScript中处理命令行参数。如果我使用osascript TestArgs.scpt a.txt b.txt
运行该脚本,则该脚本有效。但是,如果我将脚本保存为.app并从命令行运行它,它不会显示任何参数:open -a TestArgs --args a.txt b.txt
不起作用。我也尝试了几种不同的脚本,但没有成功。
on run argv
set argc to 0
try
set argc to (count of argv)
end try
tell application "Finder" to display dialog ("Argument Count: " & argc as string)
end run
似乎问题出现在OSX 10.8中,因为相同的脚本在10.7上按预期工作
我的错误在哪里?
谢谢和问候。
答案 0 :(得分:1)
有一种方法可以使用JXA(自动化JavaScript),这可能是一个可接受的解决方案。它使用Objective-C桥,因此也可以使用AppleScript。这主要是taken from the JXA Cookbook。
此问题中与AppleScript等效的JXA将使用:
function run(argv) {
…
}
但它在编译到应用程序时遇到了同样的问题。您可以通过
启动代码来解决这个问题ObjC.import('Foundation')
const args = $.NSProcessInfo.processInfo.arguments
const argv = []
const argc = args.count
for (let i = 0; i < argc; i++) { argv.push(ObjC.unwrap(args.objectAtIndex(i))) }
delete args
用户提供的参数将从argv[1]
开始,因为argv[0]
将是applet本身。
答案 1 :(得分:1)
我也一直在寻找自己的解决方案。由于尚无批准的解决方案,因此我想指出solution发布的red_menace。在那里,您可以找到一个AppleScript代码,该代码完全可以回答最初发布的问题,即如何使用命令行参数运行Applescript应用程序。
要表示感谢,此处的AppleScript代码让人想起JavaScript application发布的user137369。
答案 2 :(得分:0)
为什么不在应用程序中使用osascript?这样可行。你基本上有2种方法来传递args。这些工作适用于scpt或app ...
1)从命令行:osascript / path / to / script arg1 arg2
2)从另一个脚本:运行脚本文件路径:to:脚本参数{arg1,agr2}。