Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Shell Kommandos aus Cocoa Anwendungen aufrufen?

Shell Kommandos aus Cocoa Anwendungen aufrufen?

stefan05.02.0517:27
Weiss jemand, ob es möglich ist, aus einer Cocoa Anwendung heraus Shell Kommandos (z.B. ls) auszuführen und das Ergebnis abzuholen?
Mit AppleScript geht das, das kann ich aber nicht brauchen.
0

Kommentare

dtlmtn05.02.0517:54
Klar geht das, siehe die Cocoa Klasse NSTask unter

Falls Du Shell Kommandos ausführen möchtest, gib als ausführbare Datei /bin/bash (oder deine bevorzugte Shell) an, und als Argument das Kommando. Macht Sinn?
0
dtlmtn05.02.0517:58
Oder Du rufst ein AppleScipt aus Cocoa auf (siehe aber das macht mehr Aufwand da es keine spezielle Klasse hierfür gibt.
0
dtlmtn05.02.0518:06
Mit NSTask sieht das so aus. Am Ende der Routine ist die gesamte Ausgabe von "ls -l" im NSString "result" (das encoding muss evtl. an die verwendete Shell angepasst werden):

// create new NSTask and connect the output via NSPipe
NSTask *pipeTask = [[NSTask alloc] init];
NSPipe *newPipe = [NSPipe pipe];
NSFileHandle *readHandle = [newPipe fileHandleForReading];
NSData *inData = nil;

// run bash shell with command 'ls -l'...
[pipeTask setArguments:[NSArray arrayWithObjects:@"-c", @"ls -l", nil]];
[pipeTask setStandardOutput:newPipe];
[pipeTask setLaunchPath:@"/bin/bash"];
[pipeTask launch];

// ...and save all output into 'out'
NSMutableData *out = [NSMutableData data];
while ((inData = [readHandle availableData]) && [inData length]) {
[out appendData:inData];
}

// close task
[pipeTask release];

// convert NSData to NSString
NSString *result = [[NSString alloc] initWithData:out encoding: NSASCIIStringEncoding];
0
stefan05.02.0518:20
dtlmtn
Mit NSTask sieht das so aus. ...
danke, das probiere ich gleich mal aus. Momentan bekomme ich nur irgendwelche Exceptions.
Das Problem ist, dass ich für eine Carbon Anwendung ein Cocoa Plugin bauen muss und da gibt es immer ein paar Unstimmigkeiten.
0
stefan05.02.0518:25
dtlmtn
Mit NSTask sieht das so aus. ...

SUPER, das funktioniert. Jetzt muss ich nur noch ein paar Parameter ändern, dann bin ich fertig.

DANKE!!!
0
stefan06.02.0514:06
weisst du, ob es so etwas auch für Carbon gibt?
0
dtlmtn07.02.0502:16
Keine Ahnung, habe nie Carbon verwendet. Sorry.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.