Ejecutar script python desde terminal sin extensión .py

14

Quiero llamar a un script de python script.py desde la terminal simplemente escribiendo script . es posible? ¿Si es así, cómo?

Sé que puedo evitar escribir python script.py agregando #! / Usr / bin / env python en la parte superior del script, pero aún tengo que agregar el sufijo .py para ejecutar el script.

jmau5
fuente

Respuestas:

21

Los sistemas de archivos Unix / Linux no se basan en extensiones como Windows. No debería necesitar .pyal final de un archivo para ejecutarlo.

Puede ejecutar el archivo llamándolo con el intérprete:

python ScriptFile

O marcándolo como ejecutable y definiendo el intérprete en la primera línea (por ejemplo #!/usr/bin/python).

Si no puede ejecutar el archivo con:

/Path/to/ScriptFile

verifique los permisos con

ls -l ScriptFile

Es posible que deba agregar el indicador ejecutable y chmodque se ejecute por usted.

Si utiliza scripts personalizados regularmente, puede asegurarse de que el directorio que los almacena se agregue a la PATHvariable de entorno.

Patricio
fuente
1
El archivo está en ~ / workspace / python. Agregué ~ / workspace / python a mi ruta, ejecuté sudo chmod a + x script.py ", y agregué la línea shebang (#! / Usr / bin / env python) en la parte superior del script . puedo ejecutar el script escribiendo * script.py , pero sólo escribir guión no funciona.
jmau5
2
En unix / linux todo es un archivo y responde a su nombre de archivo. No puede llamar a Script.py como script. Intente cambiar el nombre del archivo de script.py a script y debería solucionar su problema.
Patrick
¡Lo siento, he entendido mal! Todo resuelto, gracias!
jmau5
5

La .pyextensión no es necesaria para ejecutar el script. Solo tiene que hacer que el script sea ejecutable (por ejemplo, ejecutando chmod a+x script) y agregar la línea shebang ( #!/usr/bin/env python).

daniel kullmann
fuente
Vea mi comentario sobre la respuesta de Patrick.
jmau5
4

Como opción, puede crear un contenedor para su script (un .pyarchivo):

Por ejemplo, tiene una secuencia de comandos runme.pypara que pueda crear un nuevo archivo runmepara ajustar la secuencia de comandos:

#!/usr/bin/env python
import runme

y luego llame a la runme.pyfuncionalidad simplemente invocando runmeen el shell.

Eso es útil para los scripts multiplataforma, ya que en la plataforma de Windows puede asignar .pyarchivos para que se invoquen solo por nombre sin extensión y shebang en el encabezado, pero en la plataforma de Linux no puede y, por lo tanto, sale el contenedor.

torre
fuente