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

После повторного поиска я не нашел элегантного решения этой проблемы: как запустить команду оболочки в obj-c и получить ее вывод. Я прочитал много вопросов по этому поводу, но все они не смогли ответить на мой вопрос.

Некоторые получают значение выхода ( Получить результат из сценария оболочки target-c ), другие только запускают команду ( Выполнение командной строки оболочки какао / Objective-C ) и, наконец, другие Попросите меня записать вывод в файл ( Выполнить команду терминала из приложения Какао ).

Я действительно хотел бы избежать записи / чтения файла, так как это не очень чистое решение.

Нет ли способа прочитать вывод напрямую в obj-c? Если так, то как?

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

Посмотрите на класс PRHTask. Это замена NSTask, с блоками завершения. https://bitbucket.org/boredzo/prhtask

Выписка из шапки:

  • Во-первых, вместо того, чтобы устанавливать собственный канал для стандартного вывода и ошибки, вы можете указать задаче накапливать вывод для вас и извлекать его после завершения задания.
  • Во-вторых, когда процесс завершается, вместо публикации NSNotification, PRHTask вызовет любой из двух предоставленных вами блоков. Вы можете установить их в один блок, если хотите.
2 голосов
/ 29 декабря 2011

Код из "doshellscript" из первой ссылки ( Получить результат из сценария оболочки target-c ) фактически возвращает строку NSString с выводом команды. Если это не работает для вас, возможно, команда выводит через stderr, а не через stdin? Вы уже пробовали это? Стандартным механизмом запуска команд в Какао является NSTask, поэтому, по крайней мере, начинайте с него.

0 голосов
/ 12 марта 2012

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

...