NSTask и аргументы при запуске инструментов командной строки - PullRequest
2 голосов
/ 03 декабря 2011

Как бы я передал аргументы (хост в данном случае) NSTask в этом коде? Он не принимает хост NSString. Если я передаю значение хоста с помощью пинга, например,

[NSArray arrayWithObjects:@"-c",@"ping -c 5 www.google.com",nil]

тогда это работает. Но он не будет принимать аргумент хоста отдельно. Заранее спасибо за помощь.

task =  [[NSTask alloc] init];
[pipe release];
pipe = [[NSPipe alloc] init];
[task setStandardInput: [NSPipe pipe]];  

[task setLaunchPath:@"/bin/bash"];

NSArray *args = [NSArray arrayWithObjects:@"-c",@"ping -c 5",host,nil];

[task setArguments:args];
[task setStandardOutput:pipe];
NSFileHandle *fh = [pipe fileHandleForReading];

Ответы [ 3 ]

5 голосов
/ 03 декабря 2011

Использование stringWithFormat метод NSString класс

 task =  [[NSTask alloc] init];
        [pipe release];
        pipe = [[NSPipe alloc] init];
        [task setStandardInput: [NSPipe pipe]];  

    [task setLaunchPath:@"path"];

    NSArray *args = [NSArray arrayWithObjects:@"-c",[NSString stringWithFormat: @"%@ %@ %@ %@",@"ping",@"-c",@"5",host],nil];

    [task setArguments:args];
    [task setStandardOutput:pipe];
    NSFileHandle *fh = [pipe fileHandleForReading];
1 голос
/ 03 декабря 2011

Ваши аргументы неверны. Прежде всего, вы должны установить для launchpath значение / bin / ping, или где бы ни находилась задача, тогда аргументы должны быть массивом аргументов, которые вы обычно вводите в командной строке, но затем разделяете по пробелам там ..

Пожалуйста, посмотрите этот учебник Обертывание команд UNIX для получения дополнительной информации о том, как это сделать правильно.

0 голосов
/ 03 декабря 2011
NSMutableArray *args = [NSMutableArray array];
NSArray *args = [NSArray arrayWithObjects:@"-c", @"\"ping -c 5", host, @"\"",nil]
[task setArguments:args];

Bash -c должен принимать вашу команду в кавычках.

...