I'm in the process of converting 开发者_Python百科AMShellWrapper to my own application that runs an SH file that has userinput. Therefore, I need to send data to a running task.
Any ideas?
Elijah
You need a somewhat different approach along the lines of PseudoTTY.app!
/*
code added to PseudoTTY/PtyView.m
sources:
- PseudoTTY.app, http://amath.colorado.edu/pub/mac/programs/PseudoTTY.zip
- charliebot/server.sh, http://sourceforge.net/projects/charliebot/
(note: modify server.sh to accept complete paths; see:
http://stackoverflow.com/questions/3540269/noclassdeffounderror-when-running-shell-script)
*/
@interface PtyView (PtyPrivate)
-(int)count: (NSString *) str;
...
@end
@implementation PtyView (PtyPrivate)
-(int)count: (NSString *) str {
static int counter = 0;
if (
([str rangeOfString:@"Charlie>"].location != NSNotFound ) || \
([str rangeOfString:@"[Charlie] user>"].location != NSNotFound )
)
{
counter++;
}
return counter;
}
-(void)startTask
{
NSString * cmd = @"/path/to/charliebot/server.sh";
//NSString * cmd = @"/bin/sh";
...
[self insertText: @"\n\n"];
}
-(void) didRead: (NSNotification *)noty
{
NSData * data = [[noty userInfo] objectForKey:NSFileHandleNotificationDataItem];
if ([data length] == 0)
return; // end of file
NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
int printvar = [self count: str];
if (printvar < 1 )
{
[self insertText: @"."];
[str release];
[[noty object] readInBackgroundAndNotify];
}else if (printvar == 1) {
[self insertText: @"\n\n"];
[self insertText: str];
[str release];
[[noty object] readInBackgroundAndNotify];
}else {
[self insertText: str];
[str release];
[[noty object] readInBackgroundAndNotify];
}
}
@end
精彩评论