Aquí está mi código:NSTask NSPipe - comando objetivo c línea de ayuda
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];
así que estoy tratando de replicar esto:
cd /applications/jarvis/brain/
./server.sh
pero utilizando NSTask en Objective-C.
Por alguna razón, sin embargo, cuando ejecuto este código, stringRead, no devuelve nada. Debería devolver qué terminal está devolviendo cuando ejecute el archivo .sh. ¿Correcto?
¿Alguna idea?
Elías
¿Está seguro de que la secuencia de comandos server.sh se ejecuta en salida estándar? Tal vez deberías conectar stderr también y ver si contiene algo. También le conviene considerar leer los datos del conducto mientras se está ejecutando la tarea, porque si intenta imprimir demasiado en el conducto mientras no está leyendo y el búfer se llena, la tarea se bloqueará la próxima vez intenta dar salida a cualquier cosa. –
No estoy seguro. ¿Puedes mostrarme un ejemplo? Sí, eliminé [publicación de tarea] y [tarea waitUntilExit]. El mismo problema. – objectiveccoder001
¿Está revisando los contenidos de stringRead programmatically (o en gdb), o está intentando imprimirlos usando NSLog o algo así? Si está utilizando NSLog y no ve ninguna salida, vaya a la sesión de la Consola en Aplicaciones> Utilidades para su salida. Los scripts de Shell ejecutados como NSTask pueden hacer que la salida de la consola de Xcode deje de funcionar. Aparte de eso, apoyo la opinión de Kevin para verificar si hay algo en el error estándar (simplemente agregue un segundo conducto y configurarlo como un error estándar de su tarea), y para no confiar en que el tubo pueda almacenar todos la salida de tu tarea. – puzzle