После повторного поиска я не нашел элегантного решения этой проблемы: как запустить команду оболочки в obj-c и получить ее вывод. Я прочитал много вопросов по этому поводу, но все они не смогли ответить на мой вопрос.
Некоторые получают значение выхода ( Получить результат из сценария оболочки target-c ), другие только запускают команду ( Выполнение командной строки оболочки какао / Objective-C ) и, наконец, другие Попросите меня записать вывод в файл ( Выполнить команду терминала из приложения Какао ).
Я действительно хотел бы избежать записи / чтения файла, так как это не очень чистое решение.
Нет ли способа прочитать вывод напрямую в obj-c? Если так, то как?
Посмотрите на класс PRHTask. Это замена NSTask, с блоками завершения. https://bitbucket.org/boredzo/prhtask
PRHTask
NSTask
Выписка из шапки:
Во-первых, вместо того, чтобы устанавливать собственный канал для стандартного вывода и ошибки, вы можете указать задаче накапливать вывод для вас и извлекать его после завершения задания. Во-вторых, когда процесс завершается, вместо публикации NSNotification, PRHTask вызовет любой из двух предоставленных вами блоков. Вы можете установить их в один блок, если хотите.
Код из "doshellscript" из первой ссылки ( Получить результат из сценария оболочки target-c ) фактически возвращает строку NSString с выводом команды. Если это не работает для вас, возможно, команда выводит через stderr, а не через stdin? Вы уже пробовали это? Стандартным механизмом запуска команд в Какао является NSTask, поэтому, по крайней мере, начинайте с него.
Если вашей задаче требуются права администратора, вы можете посмотреть на STPrivilegedTask .