내부에 포함된 웹 서버를 시작/중지하는 코코아 응용 프로그램을 작성해야 할 일이 생겨서, 터미널 명령을 실행하는 메서드를 작성하느라 이것저것 고민하다가, 스택오버플로에서 어떤 유저가 /bin/sh 유틸리티를 통해 셸 스크립트 파일을 실행하는 메서드를 작성해 놓은 것을 찾아냈다(아마 한글을 모르는 유저라서 이 글을 읽진 못하겠지만, thanks kent!). 사실 /bin/sh 유틸리티는 –c 옵션을 사용하면 라인 단위의 명령도 실행할 수 있기 때문에, 메서드 내용을 조금 고쳐서 커맨드를 라인 단위로 수행할 수 있도록 구현해 보았다:
NSString *runCommand(NSString *commandToRun)
{
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];
NSArray *arguments = [NSArray arrayWithObjects:
@"-c" ,
[NSString stringWithFormat:@"%@", commandToRun],
nil];
NSLog(@"run command: %@",commandToRun);
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *output;
output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
return output;
}
위 명령은 터미널 명령 수행하듯, 다음과 같이 사용하면 된다:
NSString *output = runCommand(@"ps -A | grep mysql");
'TechLog' 카테고리의 다른 글
performOnMainThread 대신 dispatch_async() 사용하여 코드 블럭 실행하기 (0) | 2013.01.09 |
---|---|
Portable Django & Python for Mac OS X (0) | 2012.12.14 |
App Store, Google Play, Windows Phone Marketplace에게 있어 개발자란 무엇인가 (0) | 2012.08.25 |
아마존 EC2 네트워크 반응 속도 측정 (0) | 2012.08.14 |
장고 라인하르트 이야기 (0) | 2012.08.01 |