¿Cómo puedo ejecutar mi programa python directamente desde el shell?


10

Escribí un guion. Cuando comienza, no se detendrá y sigue obteniendo datos de Internet. Puedo llamarlo de esta manera:

cd /User/Desktop/project/internetScanner/
python3 main.py start

Pero me gustaría llamarlo directamente desde la terminal de esta manera, dentro del destino:

internetScanner start

¿Como lo puedo hacer?


2
Me pregunto si el título podría cambiarse en esto ..
— user606723

@ user606723 No dude en sugerir una edición para que se modifique. El primer título "¿Cómo dejar que mi programa pueda ejecutarse en shell?" No fue muy bueno.
— slhck

Respuestas:


27

Probablemente debería cambiar el nombre de su archivo main.pya internetScanner. Las extensiones en * nix son puramente opcionales. No debería importar aquí.

mv main.py internetScanner

Luego, agregue la siguiente línea a este archivo, justo al principio:

#!/usr/bin/env python3

Esto asegurará que cuando el shell ejecute el archivo, sepa usarlo python3para interpretar el contenido. Esto se conoce como el Shebang . Ahora, haga que el archivo sea ejecutable:

chmod +x internetScanner

Ahora puede ejecutar su programa desde dentro /User/Desktop/project/internetScanner/:

./internetScanner start

Su programa se ejecutará en primer plano y continuará ejecutándose hasta que presione Ctrl- C. Si no desea esto, también puede iniciar el programa en segundo plano, agregando un ampersand después del comando:

./internetScanner start &

Esto permitirá que su programa se ejecute, pero puede continuar usando su shell. Esto se llama control de trabajo, y hay un tutorial simple al respecto aquí .

Si ahora desea poder ejecutar el programa desde cualquier lugar del sistema, debe agregar el internetScannerdirectorio a su PATH: ¿Qué son las RUTA y otras variables de entorno, y cómo puedo configurarlas o usarlas?


Buena respuesta. Recomiendo agregar que tal vez quiera terminar el comando con un signo de y comercial (&) si no quiere esperarlo y / o redirigir su salida y flujo de error a un archivo.
— Ben Hocking

@BenHocking Gracias, lo agregué a la respuesta.
— slhck

X &no separa el proceso del shell de control, solo pone en segundo plano el proceso, lo que significa que si ese shell sale, recibirá la señal TERM; por lo que si usted no quiere que se debe utilizar de separación , detach ./internetScanner start.
— Dan D.

1
@DanD. ... o nohup, disowno at, etcétera. ¿Cómo desconecto completamente un proceso de la Terminal?
— slhck

Vale la pena señalar que todavía se puede nombrar main.pysiempre que esté vinculado a internetScanneralgún lugar en $ PATH.
— jdd

2

Suponiendo que no /User/Desktop/project/internetScanner/se necesitan otros archivos , si desea instalar para un solo usuario, enlace ( ln -s) main.pya $HOME/bin/internetScanner. Probablemente necesites mkdir $HOME/binprimero.

La próxima vez que inicie sesión, $HOME/binprobablemente se agregará a su RUTA. Si desea que esté disponible para todos los usuarios, cópielo en /usr/local/bin.

Si debe ejecutarse /User/Desktop/project/internetScanner/, comience importando osy llamando

os.chdir('/User/Desktop/project/internetScanner/') 

o cree una secuencia de comandos de inicio en $HOME/bino /usr/local/binque cambie /User/Desktop/project/internetScanner/y ejecute la secuencia de comandos.


0

Poner alias internetScanner "python /User/Desktop/project/internetScanner/main.py"en el archivo .aliases (para csh). Para bash, pon alias internetScanner="python /User/Desktop/project/internetScanner/main.py".bashrc. Después de eso, puede usar internetScanner desde cualquier lugar.


Nunca he oído hablar de un .aliasesarchivo. ¿Es eso algo estándar para Bash? ¿o tienes que buscarlo explícitamente en tu .bashrc?
— Kazark
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.