Shell や Perl などで `file anyfile` のように記述して、外部プログラムの実行結果(標準出力)を文字列で取り込むことがありますが、これをプログラムから行なうサンプルです。(処理効率やエラー処理は未検討ですが。)
NSTask と NSPipe を使うと簡単にできます。
NSString+Task.h
// NSString+Task.h
#import
@interface NSString (Task)
+ (NSString *)stringWithRunningTask:(NSString *)taskPath arguments:(NSArray *)arguments;
@end
NSString+Task.m
// NSString+Task.m
#import "NSString+Task.h"
@implementation NSString (Task)
+ (NSString *)stringWithRunningTask:(NSString *)taskPath arguments:(NSArray *)arguments
{
NSTask *aTask = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
[aTask setLaunchPath:taskPath];
[aTask setArguments:arguments];
[aTask setStandardOutput:pipe];
[aTask launch];
NSFileHandle *readHandle = [pipe fileHandleForReading];
NSData *inData = nil;
NSMutableData *allData = [[NSMutableData alloc] init];
while ((inData = [readHandle availableData]) && [inData length]) {
[allData appendData:inData];
}
[aTask waitUntilExit];
NSString *string = [[NSString alloc] initWithData:allData encoding:NSUTF8StringEncoding];
return string;
}
@end