Hier ist mein Code:NSTask NSPipe - Ziel c Befehlszeilenhilfe
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];
Also das ich versuche zu replizieren:
cd /applications/jarvis/brain/
./server.sh
aber mit NSTask in Objective-c.
Aus irgendeinem Grund, wenn ich diesen Code ausführen, StringRead, gibt nichts zurück. Es sollte zurückgeben, welches Terminal zurückkehrt, wenn ich die .sh-Datei starte. Richtig?
Irgendwelche Ideen?
Elijah
Sind Sie sicher, dass das Skript server.sh auf dem Standardausgang ausgegeben wird? Vielleicht sollten Sie stderr auch anschließen und sehen, ob das etwas enthält. Sie können auch das Lesen von Daten aus der Pipe während der Ausführung der Aufgabe in Erwägung ziehen, da die Task beim nächsten Mal aufhängt, wenn sie beim Lesen zu viel Druck auf die Pipe ausübt und der Puffer voll wird Es versucht alles auszugeben. –
Ich bin mir nicht sicher. Kannst du mir ein Beispiel zeigen? Ja, ich habe [Aufgabenfreigabe] und [Aufgabe waitUntilExit] entfernt. Gleiches Problem. – objectiveccoder001
Überprüfen Sie den Inhalt von StringRead programmgesteuert (oder in gdb), oder versuchen Sie, sie mit NSLog oder etwas auszudrucken? Wenn Sie NSLog verwenden und überhaupt keine Ausgabe sehen, überprüfen Sie das Konsolenprotokoll in Anwendungen> Dienstprogramme für Ihre Ausgabe. Shell-Skripts werden ausgeführt, wenn NSTask die Ausgabe der Xcode-Konsole stoppen kann. Zweitens, Kevins Meinung zu überprüfen, ob es etwas auf Standard-Fehler ist (fügen Sie einfach eine zweite Pipe und legen Sie das als Standardfehler Ihrer Aufgabe), und nicht auf die Pipe in der Lage sein, alle zu puffern die Ausgabe Ihrer Aufgabe. – puzzle