Pregunta Propósito de #! / Usr / bin / python3


Me he dado cuenta de esto en un par de lenguajes de scripting, pero en este ejemplo, estoy usando python. En muchos tutoriales, comenzarían con #!/usr/bin/python3 en la primera linea No entiendo por qué tenemos esto.

  • ¿No debería el sistema operativo saber que es un script de Python (obviamente está instalado ya que lo está haciendo referencia)?
  • ¿Qué sucede si el usuario está utilizando un sistema operativo que no está basado en Unix?
  • El idioma está instalado en una carpeta diferente por el motivo que sea
  • El usuario tiene una versión diferente. Especialmente cuando no es un número de versión completo (como Python3 vs Python32)

En todo caso, podría ver esto rompiendo el script de python debido a los motivos enumerados anteriormente.


74
2017-10-06 04:29


origen


Respuestas:


#!/usr/bin/python3 es un línea shebang.

Una línea shebang define dónde se encuentra el intérprete. En este caso, el python3 intérprete se encuentra en /usr/bin/python3. Podría ser un bash, ruby, perl o cualquier otro intérprete de lenguajes de scripting. El sistema operativo no sabe que es una secuencia de comandos python si configura el indicador de ejecución en el script y lo ejecuta como ./script.py, a menos que lo ejecute como python3 script.py o establecer la línea shebang.

Puedes usar /usr/bin/env python3 para la portabilidad en diferentes sistemas si tienen el intérprete de idiomas instalado en diferentes ubicaciones.


115
2017-10-06 04:35



Eso se llama hash-bang. Si ejecuta el script desde el shell, inspeccionará la primera línea para descubrir qué programa debería iniciarse para interpretar el script.

Un sistema operativo no basado en Unix utilizará sus propias reglas para descubrir cómo ejecutar el script. Windows, por ejemplo, usará la extensión de nombre de archivo y # hará que la primera línea sea tratada como un comentario.

Si la ruta al ejecutable de Python es incorrecta, naturalmente la secuencia de comandos fallará. Es fácil crear enlaces al ejecutable real desde cualquier ubicación especificada por la convención estándar.


13
2017-10-06 04:34



Esta línea ayuda a encontrar el ejecutable del programa que ejecutará el script. Esta notación shebang es bastante estándar en la mayoría de los lenguajes de scripting (al menos como se usa en sistemas operativos adultos).

Un aspecto importante de esta línea es especificar cual intérprete será utilizado. En muchas distribuciones de Linux centradas en el desarrollo, por ejemplo, es normal tener varias versiones de python instaladas al mismo tiempo.

Python 2.xy Python 3 no son 100% compatibles, por lo que esta diferencia puede ser muy importante. Asi que #! /usr/bin/python y #! /usr/bin/python3 no son lo mismo (y tampoco son lo mismo #! /usr/bin/env python3 como se menciona en otra parte de esta página.


9
2017-10-11 01:56



  1. Y esta línea es cómo.

  2. Es ignorado

  3. No se ejecutará, y se debe cambiar para que apunte a la ubicación correcta. O env debería ser usado.

  4. No se ejecutará, y probablemente no se ejecute en una versión diferente independientemente.


5
2017-10-06 04:33