Shell Script: Ejecuta un progtwig python desde dentro de un script shell

He intentado googlear la respuesta pero sin suerte.

Necesito usar el servidor de mi supercomputador de Works, pero para que se ejecute mi script de Python, debe ejecutarse a través de un shell shell.

Por ejemplo, quiero que job.sh ejecute python_script.py

¿Cómo se puede lograr esto?

Simplemente asegúrese de que el ejecutable de Python esté en su variable de entorno PATH y luego agregue en su script

 python path/to/the/python_script.py 

Detalles:

  • En el archivo job.sh, pon esto
 #!/bin/sh python python_script.py 
  • Ejecute este comando para hacer que el script sea ejecutable para usted: chmod u+x job.sh
  • Ejecutarlo: ./job.sh

Método 1 – Crear un script de shell:

Supongamos que tiene un archivo python hello.py Cree un archivo llamado job.sh que contenga

 #!/bin/bash python hello.py 

marcarlo ejecutable usando

 $ chmod +x job.sh 

entonces ejecútalo

 $ ./job.sh 

Método 2 (MEJOR) – Haz que el propio python se ejecute desde la shell:

Modifique su script hello.py y agregue esto como la primera línea

 #!/usr/bin/env python 

marcarlo ejecutable usando

 $ chmod +x hello.py 

entonces ejecútalo

 $ ./hello.py 

Imho, escribiendo

 python /path/to/script.py 

Está bastante mal, especialmente en estos días. ¿Qué python? python2.6? 2.7? 3.0? 3.1? La mayoría de las veces necesitas especificar la versión de python en la etiqueta shebang del archivo python. Me animo a usar

  #! / usr / bin / env python2 # o python2.6 o python3 o incluso python3.1 

por compatibilidad

En tal caso, es mucho mejor tener el script ejecutable e invocarlo directamente:

 #! / bin / bash

 /path/to/script.py

De esta manera, la versión de python que necesita solo se escribe en un archivo. La mayoría de los sistemas en estos días tienen python2 y python3 mientras tanto, y sucede que el enlace simbólico python apunta a python3 , mientras que la mayoría de la gente espera que apunte a python2 .

deberías poder invocarlo como python scriptname.py

p.ej

 # !/bin/bash python /home/user/scriptname.py 

También asegúrese de que la secuencia de comandos tiene permisos para ejecutar

puede hacerlo ejecutable usando chmod u + x scriptname.py

EDITAR: golpeado a ella :-p

Esto funciona mejor para mí: agregue esto en la parte superior de la secuencia de comandos:

 #!c:/Python27/python.exe 

(C: \ Python27 \ python.exe es la ruta al python.exe en mi máquina) Luego ejecute el script a través de:

 chmod +x script-name.py && script-name.py 

Guarde el siguiente progtwig como print.py :

 #!/usr/bin/python3 print('Hello World') 

Luego en el tipo de terminal:

 chmod +x print.py ./print.py 

Esto funciona para mí:

  1. Crear un nuevo trabajo de archivo de shell. Así que digamos: touch job.sh y agregue un comando para ejecutar el script de Python (incluso puede agregar argumentos de línea de comandos a ese python, generalmente predefiní mis argumentos de línea de comandos).

    chmod +x job.sh

  2. Dentro de job.sh agregue los siguientes archivos py, digamos:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

La salida de job.sh debería verse así:

Done with python_file.py

Done with python_file1.py

Normalmente lo uso cuando tengo que ejecutar varios archivos de Python con diferentes argumentos, predefinidos.

Nota: Sólo un vistazo rápido a lo que está pasando aquí:

 python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Aquí el script de shell ejecutará el archivo python_file.py y agregará múltiples argumentos de línea de comandos en el tiempo de ejecución al archivo python.
  • Esto no significa necesariamente que tenga que pasar también los argumentos de la línea de comando.
  • Solo puedes usarlo como: python python_file.py , simple y simple. A continuación, la >> imprimirá y almacenará la salida de este archivo .py en el archivo testpy-output.txt.
  • && es un operador lógico que se ejecutará solo después de que lo anterior se ejecute con éxito y como un eco opcional “completado con python_file.py” se repetirá en su cli / terminal en tiempo de ejecución.

Yo uso esto y funciona bien

 #/bin/bash /usr/bin/python python python_script.py 

Ya que las otras publicaciones dicen todo (y me topé con esta publicación mientras buscaba lo siguiente).
Aquí hay una forma de ejecutar un script de python desde otro script de python:

Python 2:

 execfile("somefile.py", global_vars, local_vars) 

Python 3:

 with open("somefile.py") as f: code = compile(f.read(), "somefile.py", 'exec') exec(code, global_vars, local_vars) 

y puede proporcionar sys.argv proporcionando algún otro sys.argv