Как запустить команды оболочки из приложения Mac / MacRuby? - PullRequest
5 голосов
/ 19 декабря 2011

Я пытаюсь написать небольшое приложение строки состояния MacRuby, которое запускает команду из командной строки и отображает вывод. Я не знаю, как это сделать. Как я могу сделать это из моего приложения Mac?

Обновление: Еще одна вещь, которая может потребоваться, это запросить пароль администратора. Иногда, когда я запускаю этот скрипт из командной строки, он запрашивает мой пароль. Я не знаю, как запросить у пользователя пароль (или встроить оболочку, чтобы он мог набрать его напрямую).

Ответы [ 2 ]

6 голосов
/ 16 февраля 2012

Используя Какао и 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 и эту ссылку . По сути, вам нужно позвонить

AuthorizationExecuteWithPrivileges(...)

с настроенным AuthorizationRef, путем к инструменту для выполнения, флагами, аргументами. Вот полезный пример здесь (в ObjC), показывающий, как это работает.

1 голос
/ 19 декабря 2011

Вы можете просто использовать обратные пометки:

output = `cd ~ && ls`
puts output # or assign to a label, textbox etc.

Если для запуска вашей команды требуются права администратора, она вообще не будет запускаться и не будет возвращать ответ.

...