2011-12-03 77 views
1

如何在此代碼中將參數(本例中爲主機)傳遞給NSTask?它不接受主機NSString。如果我通過ping的主機價值,例如..運行命令行工具時的NSTask和參數

[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

使用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]; 
+0

謝謝。這就像一個魅力。 – ZionKing

1

您的論點不正確。首先,您應該將啓動路徑設置爲/ bin/ping或任務所在的位置,然後參數應該是您通常在命令行中輸入的參數的陣列,然後再用空格隔開。

請參閱本教程Wrapping UNIX commands以獲取有關如何正確執行此操作的更多信息。

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

猛砸-c需要把你的命令報價stringWithFormat方法。