english version - all spanish posts
Aquí va un post corto sobre scripts en bash con código incrustado de python en "here-documents". Muy útil para scriping rápido.
El asunto aquí es demostrar cómo pasar tanto argumentos posicionales como desde la entrada estandar a un bloque de código python incrustado en un here-document dentro de un script de bash
Propuesta: escribir un script o una función bash que acepte parámetros posicionales o STDIN y que se los pase al bloque de python dentro del here-document.
Aproximación inicial: ¿nunca has querido saber cómo pasar los argumentos posicionales del script de bash al bloque de python que tienes en tu script? Aquí va el código:
#! /bin/bash [... código bash ...] # Nuestro bloque python python - $@ << EOF import sys print sys.argv[:] EOF [... más código bash ...]
Así funciona:
bash aproximacioninicial.sh one two ['-', 'one', 'two']
Vamos a avanzar un poco más... ¿Qué pasa si queremos aceptar también un pipe desde el STDIN? En mi «humilde» opinión esta sería una buena aproximación a la resolución del problema (utilizo una función para hacer el código más claro):
#! /bin/bash [... código bash ...] # la funciona que pasa a nuestro python tanto # argumentos posicionales como input del STDIN # en este caso si no hay argumentos utilizamos el STDIN myfunct () { [[ $# > 0 ]] && ARGS=$@ || read ARGS python - $ARGS << EOF import sys print sys.argv[:] exit EOF } [... mas código bash ...]
Y aquí está la salida resultante tanto de la STDIN como cuando usamos los argumentos posicionales:
~$ echo hola amigos | myfunct ['-', 'hola', 'amigos'] ~$ myfunct hasta luego ['-', 'hasta', 'luego']
HTH
0 comments:
Post a Comment