Я использую NSTask
для запуска внешней утилиты, которая возвращает длинную строку данных. Проблема в том, что когда возвращаемая строка превышает большой объем данных (около 32759 символов), она становится null
или усекает возвращаемую строку. Как вернуть полный вывод?
NSTask *myTask = [[NSTask alloc] init];
[myTask setLaunchPath:myExternalCommand];
[myTask setArguments:[NSArray arrayWithObjects: arg1, arg2, nil]];
NSPipe *pipe = [NSPipe pipe];
[myTask setStandardOutput:pipe];
NSFileHandle *taskHandle;
taskHandle = [pipe fileHandleForReading];
[myTask launch];
[myTask waitUntilExit];
NSData *taskData;
taskData = [taskHandle readDataToEndOfFile];
NSString *outputString = [[NSString alloc] initWithData:taskData
encoding:NSUTF8StringEncoding];
NSLog(@"Output: \n%@", outputString);
// (null or truncated) when stdout exceeds x amount of stdout
Для проверки работоспособности используйте cat
или аналогичный для большого файла для myExternalCommand
. Кажется, проблема возникает сразу после длины символа 32759 ...
решение? Я не уверен, но может потребоваться как-то прочитать возвращаемые значения stdout
порциями, а затем добавить данные outputString
, если это возможно.
обновление: я пытался переместить waitUntilExit
после readDataToEndOfFile
за предложение, но это не повлияло на результат.
* пожалуйста, обратите внимание, я ищу Obj-C
решение, спасибо.