¿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?

Ted Wong
fuente
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?

slhck
fuente
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.

Perkins
fuente
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.

Excalibur
fuente
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