task = [NSTask new];
[task setLaunchPath:@"/bin/sh"];
[task setArguments:[NSArray arrayWithObject:@"/applications/jarvis/brain/server.sh"]];
[task setCurrentDirectoryPath:@"/"];
NSPipe *outputPipe = [NSPipe pipe];
[task setStandardInput:[NSPipe pipe]];
[task setStandardOutput:outputPipe];
[task launch];
NSMutableString *outputString = [NSMutableString string];
while ([outputString rangeOfString:@"Jarvis>"].location == NSNotFound) {
[outputString appendString:[[[NSString alloc] initWithData:[[outputPipe fileHandleForReading] readDataToEndOfFile] encoding:NSUTF8StringEncoding] autorelease]];
}
NSArray* substrings = [outputString componentsSeparatedByString:@"Jarvis>"];
NSString* finalCharlieOutputNSTask = [substrings lastObject];
NSSpeechSynthesizer * syn = [[NSSpeechSynthesizer alloc] init];
[syn startSpeakingString:finalCharlieOutputNSTask];
self.charlieOutput.stringValue = finalCharlieOutputNSTask;
Ok, c'est mon code. Il lance un fichier SH et lit la sortie. MAIS, je veux qu'il attende que "Jarvis>" apparaisse dans la chaîne avant de dire et d'imprimer le résultat. Mais, il me semble qu'avec la boucle while, mon code se fige là. Sans cela, il lit la sortie normale du lancement du fichier server.sh, mais le tout. Des idées pour lesquelles cela ne fonctionne pas?Problème de code - objectif c - attendre que la valeur de chaîne apparaisse dans la valeur de chaîne
Voici le fichier Server.sh:
echo Starting Jarvis Program D.
ALICE_HOME=.
SERVLET_LIB=lib/servlet.jar
ALICE_LIB=lib/aliceserver.jar
JS_LIB=lib/js.jar
# Set SQL_LIB to the location of your database driver.
SQL_LIB=lib/mysql_comp.jar
# These are for Jetty; you will want to change these if you are using a different http server.
HTTP_SERVER_LIBS=lib/org.mortbay.jetty.jar
PROGRAMD_CLASSPATH=$SERVLET_LIB:$ALICE_LIB:$JS_LIB:$SQL_LIB:$HTTP_SERVER_LIBS
java -classpath $PROGRAMD_CLASSPATH -Xms64m -Xmx128m org.alicebot.server.net.AliceServer $1
BAH! Non, il gèle toujours à la boucle while. Je poste mon code actuel dans ma question. Des idées? – objectiveccoder001
En outre, comme je l'ai déjà dit: Il me semble que lorsque je vérifie la chaîne de sortie avant la boucle while, je reçois le message "Starting program G" qui est un écho dans le fichier .sh. MAIS, pendant la boucle while, je vérifie la valeur de la chaîne de sortie, et elle renvoie la même chose ... aucune autre configuration ... juste l'écho. Je le vérifie avec NSRunAlertPanel() – objectiveccoder001
En plus du 'echo' d'origine, comment est l'impression de votre fichier bash sur stdout? Y a-t-il d'autres 'échos 'censés fonctionner? Quelle est la sortie lorsque vous exécutez le fichier bash à partir du Terminal? L'utilisateur est-il censé entrer une entrée? –