2010-10-17 27 views
12

J'ai essayé de résoudre ce problème depuis un certain temps maintenant sans succès. La croûte de la situation est que j'utilise un script bash pour envoyer des paramètres aa script python:Comment passer des arguments variables du script bash au script python

Exemple:

foo.sh appelle bar.py .... l'appel ressemble à: bar. py $ var1 $ var2 ... $ varn

Le script python imprime alors tous les arguments à l'aide du tableau sys.argv. Le script python fonctionne correctement à partir de la ligne de commande, mais lorsqu'il est appelé avec le script bash (par exemple, foo.sh), je n'obtiens aucune sortie de bar.py.

De plus, j'ai démarré foo.sh avec l'option "#!/Bin/bash -x" et j'ai aussi regardé la sortie.

Résumons:

  • Deux scripts, foo.sh et bar.py
  • foo.sh appelle bar.py, en passant des variables de foo.sh comme arguments à bar.py
  • bar .py imprime les arguments qu'il voit à l'aide sys.argv
  • bar.py fonctionne lorsqu'il est exécuté à partir de son propre terminal, ne fonctionne pas lorsqu'il est appelé à partir foo.sh

Toute aide être génial !!!!

Merci!

Edit: Salut à tous, merci pour les réponses, le code complet est assez long ... mais ... le contenu des deux scripts peuvent être résumés

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 

Comme je suppose que tous les retraits dans le python sont corrects (pas sûr comment StackOverflow le fait encore :)). Ces deux représentent le noyau du problème que j'ai. Comme indiqué, bar.py affiche correctement les arguments, lorsqu'il n'est pas appelé depuis foo.sh.

PS: Je ne veux dire « croûte »

+1

s'il vous plaît poster le script bash réelle, il serait beaucoup plus facile de voir que les erreurs – tobyodavies

+2

Ensuite, vous faites quelque chose de très mal. Publiez un code minimal qui présente le problème. –

+0

Le script python peut-il imprimer quelque chose lorsqu'il est appelé depuis le script bash? PAR EXEMPLE. Si vous ajoutez "print" wtf "' en haut de 'foo.py', voyez-vous cette sortie lorsque vous exécutez le script bash? – intuited

Répondre

6

Modifier, depuis code a été posté

Votre code fait la bonne chose - sauf que la sortie de votre bar.py script est en cours de capture dans le tableau joined. Comme il semble que vous n'imprimez pas le contenu de joined, vous ne voyez jamais de sortie.

Voici une démonstration:

Fichier 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[@]} 

Fichier pytest.py

#!/usr/bin/python 

import sys 

for i in sys.argv: 
    print "hi" 

Cela imprimera un tas de cordes 'hi' si vous exécutez le script bash.

+0

@birryee, Oui le script a + x autorisations ... pas sûr de ce que la première question demande ... – certifiedNoob

-2

je à peu près la configuration exacte que vous décrivez, et ce à quoi ressemble mon script bash:

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

python my_script.py $VAR1 $VAR2 $VAR3 
1

EDIT:

j'ai tout compris, j'ai eu quelques combo weired de caractères, la ligne n'a pas été correctement échappé. Je l'ai changé de

var = ($ (certaines commandes))

à

var = (certaines commandes) // en utilisant les backticks (encore à apprendre l'éditeur SO ..

Bash échapper est un peu ride lol! Pour ceux qui ont répondu, merci pour toute votre aide