2011-12-03 3 views
1

이 코드에서 NSTask에 인수 (이 경우 호스트)를 전달하는 방법은 무엇입니까? 호스트 NSString을 허용하지 않습니다. 예를 들어 핑을 사용하여 호스트 값을 전달하면 ..명령 줄 도구를 실행할 때 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 클래스 따옴표로 명령을 할 필요가 -c

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

귀하의 주장이 정확하지 않습니다. 먼저 launchpath를/bin/ping으로 설정하거나 작업이있는 모든 위치에서 인수는 보통 배열이고 명령 줄에 보통 입력 할 인수가 있지만 공백으로 구분해야합니다.

제대로 수행하는 방법에 대한 자세한 내용은이 자습서 Wrapping UNIX commands을 참조하십시오.

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

강타의 stringWithFormat 방법.