如何从Cocoa-Applescript应用程序启动命令行二进制文件?

时间:2013-02-18 22:36:34

标签: xcode applescript

我想为名为gmsh的命令行二进制文件创建一个简单的GUI Cocoa-Applescript应用程序。它可以使用许多参数启动,我想通过GUI指定。它启动时会打开一个X11窗口。

在创建复杂的GUI之前,我创建了一个带有一个文本字段和一个按钮的简单界面。我希望文本字段信息是传递给二进制文件的一个参数,当我单击二进制文件的按钮以使用参数启动时。

我可以通过显示提醒进行此操作,例如按下按钮时,警报显示文本字段输入。但是,当我尝试用do shell脚本替换显示警报时,应用程序冻结并且没有任何反应。

我不知道添加gmsh二进制文件的适当位置,所以我把它放在支持文件中。

这是我的非工作AppDelegate.applscript,

script AppDelegate
property parent : class "NSObject"

property argOne : ""

on buttonClicked_(sender)
    -- display alert "Argument one is " & argOne
    do shell script "gmsh " & argOne
end buttonClicked_

on applicationWillFinishLaunching_(aNotification)
    -- Insert code here to initialize your application before any files are opened 
end applicationWillFinishLaunching_

on applicationShouldTerminate_(sender)
    -- Insert code here to do any housekeeping before your application quits 
    return current application's NSTerminateNow
end applicationShouldTerminate_

end script

一旦X11应用程序启动,我就不需要让应用程序保持打开状态,因为Cocoa-Applescript只是一个gui启动器。

1 个答案:

答案 0 :(得分:0)

执行do shell脚本时,只要shell脚本正在运行,GUI就会冻结。程序保持冻结状态意味着你的do shell脚本挂起。我看到的第一件事是我错过了命令和你发送到shell脚本的参数之间的空格。这可能是你的第一个问题,应该是

  do shell script "gmsh " & argOne

当您想要保持GUI响应时,AppleScriptObjC中有三个选项:

  1. 在后台运行shell命令
  2. 使用performSelectorInBackground_withObject _(“NameOfHandler:”,参数)
  3. 创建NSTask