2011-08-01 5 views
1

Je souhaite exécuter une commande Terminal dans mon programme. La commande ressemble à ceci:Exécuter une commande de terminal avec NSTask

cd /path/to/file/; ./foo HTTPProxy 127.0.0.1 

Il fonctionne avec system() mais il ne fonctionne pas quand je l'utilise NSTask.

system("cd /path/to/file/; ./foo HTTPProxy 127.0.0.1"); 

fonctionne très bien, mais

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/path/to/file/./foo"]; 

NSPipe *pipe = [NSPipe pipe]; 
[task setStandardOutput:pipe]; 
NSFileHandle *file = [pipe fileHandleForReading]; 

[task setArguments:[NSArray arrayWithObjects:@"HTTPProxy 127.0.0.1", nil]]; 
[task launch]; 

NSData *data = [file readDataToEndOfFile]; 
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
NSLog(string); 

ne fonctionne pas. Sortie:

Command-line option 'HTTPProxy 127.0.0.1' with no value. Failing. 

Quelqu'un at-il une idée?

Répondre

2

Maintenant, je pense que j'ai le:

[task setArguments:[NSArray arrayWithObjects:@"HTTPProxy", @"127.0.0.1", nil]]; 

Ce sont des arguments distincts dans votre invocation de la ligne de commande ...

RÉPONSE VIEUX:

Vous pouvez essayer le réglage du courant répertoire pour l'exécution:

– setCurrentDirectoryPath: 

Ceci est fondamentalement l'effet de cd dans la version system de votre code.

+0

Non, même erreur ... – ahee

+0

OUI Merci beaucoup, ça marche maintenant !!! – ahee

Questions connexes