Sé que puedo ejecutar un script python desde mi script bash usando lo siguiente:
python python_script.py
Pero, ¿qué pasa si quisiera pasar una variable / argumento a mi script de Python desde mi script de bash? ¿Cómo puedo hacer eso?
Básicamente, bash resolverá un nombre de archivo y luego python lo cargará, pero necesito enviar el nombre de archivo de bash a python cuando lo llame.
python python_script.py
en su shell predeterminado en Debian, ya está usando bash ... así que hágalo en su script bash:python python_script.py arg1 arg2 ...
Respuestas:
Para ejecutar una secuencia de comandos de Python en una secuencia de comandos de bash, debe llamar al mismo comando que usaría dentro de una terminal. Por ejemplo
> python python_script.py var1 var2
Para acceder a estas variables dentro de Python, necesitará
import sys print sys.argv[0] # prints python_script.py print sys.argv[1] # prints var1 print sys.argv[2] # prints var2
fuente
Utilizar
python python_script.py filename
y en tu secuencia de comandos de Python
import sys print sys.argv[1]
fuente
Además
sys.argv
, también eche un vistazo al módulo argparse , que ayuda a definir opciones y argumentos para los scripts.fuente
Opción integrada:
Envuelva el código de Python en una función bash.
#!/bin/bash function current_datetime { python - <<END import datetime print datetime.datetime.now() END } # Call it current_datetime # Call it and capture the output DT=$(current_datetime) echo Current date and time: $DT
Utilice variables de entorno para pasar datos a su secuencia de comandos de Python incrustada.
#!/bin/bash function line { PYTHON_ARG="$1" python - <<END import os line_len = int(os.environ['PYTHON_ARG']) print '-' * line_len END } # Do it one way line 80 # Do it another way echo $(line 80)
http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html
fuente
usar en el script:
echo $(python python_script.py arg1 arg2) > /dev/null
o
python python_script.py "string arg" > /dev/null
El script se ejecutará sin salida.
fuente
Tengo un script bash que llama a una pequeña rutina de Python para mostrar una ventana de mensaje. Como necesito usar killall para detener el script de Python, no puedo usar el método anterior, ya que significaría ejecutar killall python, lo que podría eliminar otros programas de Python, así que uso
pythonprog.py "$argument"
& # El & devuelve el control directamente al script bash, por lo que debe estar fuera de las comillas invertidas. La vista previa de este mensaje lo muestra sin "` "ninguno de los lados del comando por alguna razón.Siempre que la secuencia de comandos de python se ejecute desde la cli por nombre en lugar de python pythonprog.py, esto funciona dentro de la secuencia de comandos. Si necesita más de un argumento, use un espacio entre cada uno dentro de las comillas.
fuente
y eche un vistazo al módulo getopt . ¡Funciona bastante bien para mí!
fuente