Запустите команду терминала с помощью NSTask - PullRequest
1 голос
/ 01 августа 2011

Я хочу запустить команду терминала в моей программе. Команда выглядит так:

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

Работает с system(), но не работает при использовании NSTask.

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

отлично работает, но

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);

нет. Выход:

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

У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 01 августа 2011

Теперь я думаю, что получил:

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

это отдельные аргументы в вашем вызове из командной строки ...

СТАРЫЙ ОТВЕТ:

Вы можете попытаться установить текущий каталог для выполнения:

– setCurrentDirectoryPath:

Это в основном эффект cd в system версии вашего кода.

...