GNU/Linux >> Tutoriales Linux >  >> Linux

Al usar os.execlp, ¿por qué `python` necesita `python` como argv[0]

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.


Linux
  1. ¿Por qué todos usan Docker?

  2. ubicación del archivo temporal cuando se usa tmpfile() en C

  3. ¿Por qué mi $LD_LIBRARY_PATH se desarma cuando uso screen con bash?

  4. Uso de / al usar cd

  5. REJECT vs DROP al usar iptables

Cómo administrar paquetes de Python usando PIP

Encuentre detalles del sistema Linux usando Python

Cómo cambiar el tamaño de las imágenes usando Python

¿Por qué Shotwell tiene las posiciones X e Y invertidas cuando se usa Recortar?

¿Por qué no aparecen los colores de Git cuando se usa el reloj?

¿Por qué mi compilación de Ubuntu se retrasa al mover ventanas?