NSTask отправляет аргумент через проблему / bin / sh или / bin / bash Cocoa Objective-C - PullRequest
1 голос
/ 12 июля 2010

Обычно я пропустил скрипт в терминале через / bin / bash "[путь]" или / bin / sh "[путь]", и я передал команды в терминале через / bin / bash -c "[команда]" или / bin / sh -c "[команда]". Оба способа работают правильно. Но в моем приложении Какао, когда я пытаюсь сделать то же самое с NSTask (используя / bin / bash или / bin / sh), приложение, кажется, никогда не отвечает. Это как если бы программа застряла внутри bash или sh. Я пытался сделать это с и без waitUntilExit, и я также пытался использовать терминатор. Все еще не повезло. Кто-нибудь еще имел эту проблему или имеет ключ к пониманию того, почему это происходит?

Спасибо!

P.S. Сейчас я не на своем рабочем компьютере, но при необходимости могу предоставить код позже.

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Хорошо.Поэтому я нашел решение для всех, кому это может понадобиться.В принципе, есть проблема, это стандартный ввод.Проблема появляется только в консоли Xcode и не является ошибкой / ошибкой в ​​вашем приложении.Исправление состоит в том, чтобы добавить следующую строку (в основном, для standardInput установлено произвольное значение):

[task setStandardInput: [NSPipe pipe]];

В приведенном выше решении task - это имя переменной используемого NSTask.

0 голосов
/ 12 июля 2010

Также см .:

http://www.cocoadev.com/index.pl?HowToPipeCommandsWithNSTask

[proc setLaunchPath:@"/bin/bash"];
[proc setArguments:[NSArray arrayWithObjects: @"-c", @"/usr/sbin/netstat -rn | /usr/bin/grep default", nil]];
...