2010-05-25 21 views
9

De la documentación de Python:primer parámetro de os.exec *

Los diversos * exec() Funciones de tomar una lista de argumentos para el nuevo programa cargado en el proceso . En cada caso, se pasa el primero de estos argumentos al nuevo programa como su propio nombre en lugar de como un argumento que un usuario puede haber tipeado en una línea de comando. Para el programador C , este es el argv [0] que se transfiere al programa principal(). Para el ejemplo , os.execv ('/ bin/echo', ['foo', 'barra']) solo imprimirá la barra en la salida estándar ; foo parecerá ser ignorado.

¿Alguien puede ayudarme a entender esto? ¿Qué debo hacer si quiero ejecutar mi propio programa con algunos parámetros?

Respuesta

17

UNIX, de donde vienen todos estos elementos de exec, separó el archivo ejecutable del programa del nombre del programa, por lo que su proceso podría tener cualquier nombre arbitrario.

El primer argumento es el programa que se ejecutará. Esto debe existir. El siguiente argumento es qué su proceso que ejecuta el programa será llamado, qué estará en argv[0], y qué viene en el resultado ps (lista de proceso).

Así que, si lo hacía (en C, pero se asigna a Python también):

execl ("/usr/bin/sleep", "notsleep", "60", NULL); 

Esto iría en el programa /usr/bin/sleep pero aparecería en la lista de procesos como notsleep. argv[0] sería notsleep y argv[1] (el argumento real) sería 60. A menudo, los dos primeros parámetros serán idénticos pero de ninguna manera son necesarios.

Es por eso que el primer argumento de su lista es (aparentemente) ignorado. Es el nombre para dar al proceso, no, el primer argumento para ello.

A más correcta manera de hacerlo sería:

os.execv('/bin/echo', ['echo', 'foo', 'bar'])