2009-09-25 4 views
18

Dies ist wahrscheinlich eine dumme Frage, aber wie kann ich einen Shell-Befehl aus meiner Cocoa App ausführen?Cocoa/Objective-C Shell Befehlszeilenausführung

Ich habe den Befehl als String "Befehl", kann aber leicht Daten wie benötigt manipulieren.

Es ist nicht erforderlich, einen Rückgabewert zu erhalten.

+1

möglich Duplikat von [Führe einen Terminal-Befehl aus einer Cocoa-App aus] (http://StackOverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app) – outis

+1

siehe auch diese Frage : http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app/696942#696942 – kent

Antwort

30

NSTask ist ziemlich einfach, dies mit zu tun. Für einen synchronen Aufruf, können Sie so etwas wie dieses Fragment verwenden:

NSString *path = @"/path/to/executable"; 
NSArray *args = [NSArray arrayWithObjects:..., nil]; 
[[NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit]; 

Der -waitUntilExit Anruf sicher macht es, bevor Sie fortfahren beendet. Wenn die Task asynchron sein kann, können Sie diesen Aufruf entfernen und die NSTask einfach ausführen lassen.

3

NSTask

die NSTask-Klasse verwenden, können Sie Ihr Programm ein anderes Programm als Unterprozess ausgeführt und dieses Programm die Ausführung überwachen.

9

Wenn Sie nur etwas ausführen wollen und kümmern sich nicht um den Ausgang oder Return-Code (zB möchten Sie eine Datei berühren), können Sie einfach tun

system("touch myfile.txt"); 

So einfach ist das .

+9

Seien Sie sehr, sehr vorsichtig mit 'System' und' popen'. Es ist leicht, eine Sicherheitslücke einzuführen, indem man die Charaktere an die Shell weiterleitet, die sie für besonders hält. NSTask und 'fork' /' exec' sind viel sicherer. –