AMShellWrapper l'invio di dati ad un task in esecuzione
-
30-09-2019 - |
Domanda
Sono nel processo di conversione AMShellWrapper alla mia propria applicazione che corre un file SH che ha userinput. Pertanto, ho bisogno di inviare dati ad un task in esecuzione.
Tutte le idee?
Elia
Soluzione
Hai bisogno di un approccio un po 'diverso sulla falsariga di 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow