本文将用一个例子帮助你理解如何使用NSTask,例子通过在Cocoa中执行一个perl脚本,实现去掉给定NSString中的所有HTML标签。
这里是一个简单的perl脚本,文件名是stripper.pl,功能是去掉所有HTML标签。
#!/usr/bin/perl
while (<>) {
$_ =~ s/<[^>]*>//gs;
print
$_;
}
记得把这个脚本chmod +x,将它加入项目中,即得把它复制进执行文件包内。
这个方法会将string参数直接传递给perl脚本,并将结果返回。
- (NSString *) stringStrippedOfTags: (NSString *) string
{
NSBundle *bundle = [NSBundle
mainBundle];
NSString *stripperPath;
stripperPath = [bundle
pathForAuxiliaryExecutable:
@"stripper.pl"];
NSTask *task = [[NSTask
alloc] init];
[task
setLaunchPath: stripperPath];
NSPipe *readPipe = [NSPipe
pipe];
NSFileHandle *readHandle = [readPipe fileHandleForReading];
NSPipe *writePipe = [NSPipe
pipe];
NSFileHandle *writeHandle = [writePipe fileHandleForWriting];
[task
setStandardInput: writePipe];
[task
setStandardOutput: readPipe];
[task
launch];
[writeHandle
writeData: [string dataUsingEncoding:
NSASCIIStringEncoding]];
[writeHandle
closeFile];
NSMutableData *data = [[NSMutableData
alloc] init];
NSData *readData;
while ((readData = [readHandle availableData])
&& [readData
length]) {
[data
appendData: readData];
}
NSString *strippedString;
strippedString = [[NSString
alloc]
initWithData: data
encoding:
NSASCIIStringEncoding];
[task
release];
[data
release];
[strippedString
autorelease];
return (strippedString);
}