2009-09-25 10 views
18

Esta es probablemente una pregunta estúpida, pero ¿cómo puedo ejecutar un comando de shell desde mi aplicación Cocoa?Cocoa/Objective-C Ejecución de la línea de comandos de Shell

Tengo el comando como un "comando" de cadena, pero puede manipular datos fácilmente según sea necesario.

No es necesario obtener un valor de salida devuelto.

+1

posible duplicado de [Ejecutar un comando de terminal desde una aplicación Cocoa] (http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app) – outis

+1

también vea esta pregunta : http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app/696942#696942 – kent

Respuesta

30

NSTask es bastante fácil de hacer esto. Para una llamada sincrónica, se puede usar algo como este fragmento:

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

La llamada -waitUntilExit se asegura de que termine antes de continuar. Si la tarea puede ser asíncrona, puede eliminar esa llamada y dejar que NSTask lo haga.

3

NSTask

Utilización de la clase NSTask, su programa puede ejecutar otro programa como un subproceso y pueden monitorear la ejecución de ese programa.

9

Si lo que desea es ejecutar algo y no se preocupan por el código de salida o de retorno (por ejemplo, quieres tocar un archivo), puede simplemente hacer

system("touch myfile.txt"); 

Tan fácil como eso .

+9

Sea muy, muy cuidadoso con 'system' y' popen'. Es fácil introducir una vulnerabilidad al permitir que los personajes vayan al caparazón que considerarán especial. NSTask y 'fork' /' exec' son mucho más seguros. –

Cuestiones relacionadas