我正在尝试编写一个小的MacRuby状态栏应用程序,它从命令行运行命令并显示输出。我不知道该怎么做。如何从我的Mac应用程序中执行此操作?
更新:可能需要做的另一件事是询问管理员密码。有时,当我从命令行运行此脚本时,它会询问我的密码。我不知道如何提示用户输入密码(或嵌入shell以便他们直接输入密码)。
答案 0 :(得分:6)
使用Cocoa和MacRuby,使用NSTask。执行 ls -la 并打印输出的示例:
framework 'Cocoa'
task = NSTask.alloc.init
task.setLaunchPath("/bin/ls")
arguments = NSArray.arrayWithObjects("-l", "-a", nil)
task.setArguments(arguments)
pipe = NSPipe.pipe
task.setStandardOutput(pipe)
file = pipe.fileHandleForReading
task.launch
data = file.readDataToEndOfFile
string = NSString.alloc.initWithData(data, encoding: NSUTF8StringEncoding)
puts "Command returned: "
puts string
不幸的是,包含管理员权限并非易事,尤其是使用MacRuby。看一下SecurityFoundation框架,以及这个link。基本上,你需要打电话
AuthorizationExecuteWithPrivileges(...)
使用已配置的AuthorizationRef,要执行的工具的路径,标志,参数。有一个有用的例子here(在ObjC中)显示了它是如何工作的。
答案 1 :(得分:1)
你可以简单地使用反引号:
output = `cd ~ && ls`
puts output # or assign to a label, textbox etc.
如果您的命令需要管理员权限才能运行,它根本不会运行命令,也不会返回响应。