This is NSTask+MiscExtensions.m in view mode; [Download] [Up]
/* NSTask+MiscExtensions.m created by tsengel on Thu 04-Sep-1997 */
#import "NSTask+MiscExtensions.h"
@implementation NSTask (MiscExtensions)
+ (NSData *)outputOfCommand:(NSString *)commandString
/*"
Returns the data which is the result of executing the command described in command string. Sicne this method blocks until the command is finished and the output stream reaches end-of-file...be sure to only executes commands which terminate (no "tail -f console.log" or interactive things like "emacs myFile").
#Note: This currently only works for very simple commands...however we should be able to reach the state of accepting things like "ps -aux | grep username | gnutar cvfz blah.tar.gz -"... Jup. That would be nice. But for this we need some generic command string parsing...and this needs the integration of MiscCommandLineParser or similar code.
"*/
{
id commandList;
id commandPath;
id commandTask;
id ourPipe;
id theFileHandle;
id argArray;
id parsingHackArray;
// First extract the single commands which get piped all over the place
commandList = [[[commandString componentsSeparatedByString:@"|"] mutableCopy] autorelease];
// Now take teh frist command and wire it up to next next etc. pp..
commandString = [commandList objectAtIndex:0];
parsingHackArray = [[[commandString componentsSeparatedByString:@" "] mutableCopy] autorelease];
// The first argument is considered the path...if it is not executable return nil.
commandPath = [parsingHackArray objectAtIndex:0];
if( ![[NSFileManager defaultManager] isExecutableFileAtPath:commandPath] ) return nil;
[parsingHackArray removeObjectAtIndex:0];
argArray = parsingHackArray;
commandTask = [[NSTask new] autorelease];
ourPipe = [NSPipe pipe];
[commandTask setStandardOutput:ourPipe];
[commandTask setArguments:argArray];
[commandTask setLaunchPath:commandPath];
[commandTask launch];
theFileHandle = [ourPipe fileHandleForReading];
return [theFileHandle readDataToEndOfFile];
}
+ (NSData *)outputOfCommandArray:(NSArray *)commandArray
/*"
Taskes and array as an argument where each entry is a dictionary which contains the LaunchPath, Arguments. All commands are "piped" together in the given order.
"*/
{
// <<HACK>> Nothing..
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.