ZionKing
ZionKing

Reputation: 326

NSTask and arguments when running command line tools

How would I pass arguments (host in this case) to NSTask in this code? It does not accept the host NSString. If I pass the host value with the ping, for e.g..

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

then it works. But it won't take the host argument separately. Thanks for the help in advance.

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

Upvotes: 2

Views: 5564

Answers (3)

Alex Zielenski
Alex Zielenski

Reputation: 3601

NSMutableArray *args = [NSMutableArray array];
NSArray *args = [NSArray arrayWithObjects:@"-c", @"\"ping -c 5", host, @"\"",nil]
[task setArguments:args];

Bash -c needs to take your command in quotes.

Upvotes: 0

Parag Bafna
Parag Bafna

Reputation: 22930

Use stringWithFormat method of NSString class

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

Upvotes: 6

Antwan van Houdt
Antwan van Houdt

Reputation: 6991

Your arguments are not correct. First of all, you should set the launchpath to /bin/ping, or wherever the task is located, then the arguments should be an array of the arguments you would normally enter on the command line, but then seperated by spaces there..

Please take a look at this tutorial Wrapping UNIX commands for more information on how to do this properly.

Upvotes: 1

Related Questions