我想编写一个小的MacRuby状态栏应用程序,该应用程序从命令行运行一个命令并显示输出。我不知道如何做到这一点。如何从我的Mac应用程序中实现呢?
更新:另一件可能需要做的事情是请求管理员密码。有时候当我从命令行运行此脚本时,它会要求我输入密码。我不知道如何提示用户输入他们的密码(或嵌入shell以便他们可以直接输入)。
我想编写一个小的MacRuby状态栏应用程序,该应用程序从命令行运行一个命令并显示输出。我不知道如何做到这一点。如何从我的Mac应用程序中实现呢?
更新:另一件可能需要做的事情是请求管理员密码。有时候当我从命令行运行此脚本时,它会要求我输入密码。我不知道如何提示用户输入他们的密码(或嵌入shell以便他们可以直接输入)。
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框架和这个链接。基本上,您需要调用
AuthorizationExecuteWithPrivileges(...)
通过已配置的AuthorizationRef、要执行的工具路径、标志和参数来运行工具。这里有一个有用的例子(使用ObjC),展示了这个过程如何工作。
output = `cd ~ && ls`
puts output # or assign to a label, textbox etc.
vagrant up
并查看输出。 - Andrew