2010-10-17 50 views
12

He intentado resolver este problema por algún tiempo sin suerte. La corteza de la situación es que estoy usando un script bash para enviar parámetros de AA script en Python:Cómo pasar argumentos de variable del script bash al script python

Ejemplo:

foo.sh llama bar.py .... la llamada será similar a: bar. py $ var1 $ var2 ... $ varn

La secuencia de comandos python imprime todos los argumentos usando la matriz sys.argv. La secuencia de comandos python funciona correctamente desde la línea de comandos, pero cuando se llama desde la secuencia de comandos bash (es decir, foo.sh), no obtengo ningún resultado de bar.py.

Además, comencé foo.sh con la opción "#!/Bin/bash -x" y vi también la salida.

Para resumir:

  • Dos guiones, foo.sh y bar.py
  • foo.sh llama bar.py, pasar variables de foo.sh como argumentos para bar.py
  • bar .py muestra los argumentos que considere el uso de sys.argv
  • bar.py funciona cuando se ejecuta desde su propio terminal, no funciona cuando se llama desde foo.sh

cualquier ayuda ¡¡¡¡ser impresionante!!!!

Gracias!

Editar: Hola a todos, gracias por las respuestas, el código completo es bastante larga ... pero ... el contenido de los dos guiones se podrían resumir

foo.sh _ __ _

#!/bin/bash 
declare -a list1; 
declare -a list2; 

list1=("foo" "bar" "please"); 
list2=("foo" "bar" "please" "help"); 

declare -a joined; 

joined=($(bar.py "${list1[@]}" "${list2[@]}")); 

bar.py _ __ _

#!/bin/python 
import sys 

for arg in sys.argv: 
    print arg 

Como supongo que todas las sangrías en la pitón son correctas (no estoy seguro de cómo StackOverflow hace esto todavía :)). Estos dos representan el núcleo del problema que estoy teniendo. Como se dijo, bar.py imprime los argumentos correctamente, cuando no se llama desde foo.sh.

PS: Yo tenía la intención de decir "corteza"

+1

publique el script bash real, sería mucho más fácil ver qué está mal – tobyodavies

+2

Entonces está haciendo algo muy mal. Publique un código mínimo que muestre el problema. –

+0

¿Puede el script de python imprimir algo cuando se le llama desde el script bash? P.EJ. si agrega 'print" wtf "' en la parte superior de 'foo.py', ¿ve ese resultado cuando ejecuta el script bash? – intuited

Respuesta

6

Editar, ya código ha sido publicado

Su código está haciendo lo correcto, excepto que la salida de su secuencia de comandos bar.py se está capturando en la matriz joined. Como parece que no está imprimiendo el contenido de joined, nunca verá ningún resultado.

Aquí es una demostración:

Archivo pybash.sh

#!/bin/bash 

declare -a list1 
declare -a list2 

list1=("Hello" "there" "honey") 
list2=("More" "strings" "here") 

declare -a joined 

joined=($(./pytest.py ${list1[@]} ${list2[@]})) 
echo ${joined[@]} 

Archivo pytest.py

#!/usr/bin/python 

import sys 

for i in sys.argv: 
    print "hi" 

Esto imprimirá un manojo de cuerdas 'hi' si se ejecuta la secuencia de comandos bash.

+0

@birryee, sí, el script tiene + x permisos ... no estoy seguro de lo que está haciendo la primera pregunta ... – certifiedNoob

-2

tengo más o menos la configuración exacta que usted está describiendo, y así es como mi escritura del golpe se ve:

VAR1=... 
VAR2=... 
VAR3=... 

python my_script.py $VAR1 $VAR2 $VAR3 
1

EDIT:

lo he descubierto, que tenía algunas combinado weired de caracteres, la línea no fue escapado correctamente. He cambiado de

var = ($ (algunos comandos))

a

var = (algunos comandos) // usando acentos abiertos (todavía está aprendiendo el editor de SO .. .)

Bash escaping es un paseo lol! Para aquellos que respondieron, gracias por toda su ayuda

Cuestiones relacionadas