Cuando se ejecuta Python, crea sys.argv
para ti. Los valores de esa lista están basados en los argumentos que le pasa el sistema operativo, pero omite el sys.executable
valor de esa lista.
En otras palabras, cuando se invoca Python, establece sys.argv
a todo pero su propio ejecutable .
Cuando invocas un nuevo ejecutable a través de os.execlp()
, aún debe incluir Python en eso, ya que ese es el ejecutable que ejecutará el sistema operativo. Los primeros dos valores de lo que pasas a os.execlp()
aún son necesarios, lo que encuentre en sys.argv
más tarde.
El segundo python es un nombre para python, puede ser cualquier cadena, pero tiene que estar ahí.
Ver el segundo párrafo de http://docs.python.org/3/library/os.html?highlight=os.exec#process-management:
Las diversas funciones exec* toman una lista de argumentos para el nuevo programa cargado en el proceso. En cada caso, el primero de estos argumentos se pasa al nuevo programa como su propio nombre en lugar de como un argumento que un usuario puede haber escrito en una línea de comando. Para el programador de C, este es el argv[0] pasado al main() de un programa. Por ejemplo, os.execv('/bin/echo', ['foo', 'bar']) solo imprimirá la barra en la salida estándar; foo parecerá ser ignorado.