Voici mon code:NSTask NSPipe - objectif en ligne de commande c aide
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];
Je suis en train de reproduire ceci:
cd /applications/jarvis/brain/
./server.sh
mais en utilisant NSTask en c objectif.
Pour une raison quelconque, quand je lance ce code, stringRead, ne renvoie rien. Il devrait retourner ce que terminal retourne quand je lance le fichier .sh. Correct?
Des idées?
Elijah
Etes-vous sûr que le script server.sh est émis en sortie standard? Peut-être que vous devriez également connecter stderr et voir si cela contient quelque chose. Vous pouvez également prendre en compte la lecture des données du tube lorsque la tâche est en cours d'exécution, car s'il tente d'imprimer trop sur le tube pendant que vous ne lisez pas, la tâche se bloque la prochaine fois. il essaie de sortir quoi que ce soit. –
Je ne suis pas sûr. Pouvez-vous me montrer un exemple? Oui, j'ai supprimé [la version de tâche] et [task waitUntilExit]. Même problème. – objectiveccoder001
Vérifiez-vous le contenu de stringRead par programme (ou dans gdb), ou essayez-vous de les imprimer en utilisant NSLog ou quelque chose? Si vous utilisez NSLog et que vous ne voyez aucune sortie, consultez le journal de la console dans Applications> Utilitaires pour votre sortie. Les scripts shell s'exécutent lorsque NSTask peut faire en sorte que la sortie de la console Xcode cesse de fonctionner.À part ça, je seconde l'opinion de Kevin pour vérifier aussi s'il y a quelque chose sur l'erreur standard (il suffit d'ajouter un second tuyau et de définir cela comme une erreur standard de votre tâche), et de ne pas compter sur le tampon la sortie de votre tâche. – puzzle