Reputation: 326
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
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
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
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