本文将用一个例子帮助你理解如何使用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);
           
}