NSTask NSPipe - цель c справка командной строки

Вот мой код:

task = [[NSTask alloc] init];
[task setCurrentDirectoryPath:@"/applications/jarvis/brain/"];
[task setLaunchPath:@"/applications/jarvis/brain/server.sh"];

NSPipe * out = [NSPipe pipe];
[task setStandardOutput:out];

[task launch];
[task waitUntilExit];
[task release];

NSFileHandle * read = [out fileHandleForReading];
NSData * dataRead = [read readDataToEndOfFile];
NSString * stringRead = [[[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding] autorelease];

Таким образом, я пытаюсь копировать это:

cd /applications/jarvis/brain/
./server.sh

но с помощью NSTask в цели-c.

По некоторым причинам, хотя, то, когда я выполняю этот код, stringRead, ничего не возвращает. Это должно возвратить то, что возвращает терминал, когда я запускаю .sh файл. Корректный?

Какие-либо идеи?

Elijah

10
задан objectiveccoder001 9 August 2010 в 21:03
поделиться

1 ответ

Ошибка Xcode
В Xcode есть ошибка, которая не позволяет ему печатать любой вывод после новой задачи с использованием стандартных запускается вывод (он собирает весь вывод, но больше ничего не печатает). Вам нужно будет вызвать [task setStandardInput: [NSPipe pipe]] , чтобы заставить его снова показать вывод (или, в качестве альтернативы, распечатать задачу на stderr вместо stdout).


Предложение по окончательному коду:

NSTask *server = [NSTask new];
[server setLaunchPath:@"/bin/sh"];
[server setArguments:[NSArray arrayWithObject:@"/path/to/server.sh"]];
[server setCurrentDirectoryPath:@"/path/to/current/directory/"];

NSPipe *outputPipe = [NSPipe pipe];
[server setStandardInput:[NSPipe pipe]];
[server setStandardOutput:outputPipe];

[server launch];
[server waitUntilExit]; // Alternatively, make it asynchronous.
[server release];

NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOfFile];
NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease]; // Autorelease optional, depending on usage.
19
ответ дан 3 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: