AppleScript as .app不从命令行获取参数

时间:2013-01-19 22:45:17

标签: macos applescript command-line-arguments

我尝试在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上按预期工作

我的错误在哪里?

谢谢和问候。

3 个答案:

答案 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}。