2010-10-17 3 views
12

Ich habe versucht, dieses Problem für einige Zeit jetzt ohne Glück zu lösen. Die Kruste der Situation ist, dass ich eine Bash-Skript bin mit Parametern aa Python-Skript senden:Wie man variable Argumente vom Bash-Skript zum Python-Skript übergibt

Beispiel:

foo.sh bar.py ruft .... der Anruf wie folgt aussieht: bar. py $ var1 $ var2 ... $ varn

Das Python-Skript druckt dann alle Argumente mit dem Array sys.argv. Das Python-Skript funktioniert korrekt über die Befehlszeile, aber wenn ich es mit dem Bash-Skript (d. H. Foo.sh) anrufe, erhalte ich keine Ausgabe von bar.py.

Außerdem habe ich foo.sh mit der Option "#!/Bin/bash -x" gestartet und auch die Ausgabe angesehen.

zusammenfassen:

  • Zwei Skripte, foo.sh und bar.py
  • foo.sh bar.py nennt, Variablen von foo.sh als Argumente zu übergeben
  • bar bar.py Py druckt die Argumente es funktioniert mit sys.argv
  • bar.py sieht, wenn von seinem eigenen Terminal laufen, funktioniert nicht, wenn aus foo.sh genannt

Jede mögliche Hilfe toll sein!!!!

Danke!

Edit: Hallo, danke für die Antworten, der vollständige Code ist ziemlich lang ... aber ... der Inhalt der beiden Skripte kann

foo.sh _ __ summiert werden _

#!/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 _ __ _

Wie ich nehme, alle Einrückungen in der Python sind korrekt (nicht sicher, wie StackOverflow tut dies noch :)). Diese beiden repräsentieren den Kern des Problems, das ich habe. Wie bereits erwähnt, druckt bar.py Argumente korrekt, wenn es nicht von foo.sh aufgerufen wird.

PS: Ich wollte sagen: „Kruste“

+1

posten Sie bitte das eigentliche Bash-Skript, es würde es viel einfacher zu sehen, was falsch ist – tobyodavies

+2

Dann machst du etwas sehr falsch. Veröffentlichen Sie minimalen Code, der das Problem aufweist. –

+0

Kann das Python-Skript etwas ausgeben, wenn es vom Bash-Skript aufgerufen wird? Z.B. Wenn Sie "Print" wtf "' am oberen Rand von 'foo.py' hinzufügen, sehen Sie diese Ausgabe, wenn Sie das Bash-Skript ausführen? – intuited

Antwort

6

bearbeiten, da Code wurde geschrieben

Ihr Code ist die richtige Sache - außer dass die Ausgabe von bar.py Skript in das Array joined erfasst wird. Da es so aussieht, als würden Sie den Inhalt von joined nicht ausdrucken, sehen Sie nie eine Ausgabe.

Hier ist eine Demonstration:

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

Datei pytest.py

#!/usr/bin/python 

import sys 

for i in sys.argv: 
    print "hi" 

Dieses eines Bündels gedruckt werden aus 'hallo' Strings, wenn Sie die Bash-Skript ausgeführt werden.

+0

@birryee, Ja, das Skript hat + x Berechtigungen ... nicht sicher, was die erste Frage stellt ... – certifiedNoob

-2

Ich habe so ziemlich das genaue Setup, das Sie beschreiben, und das ist, wie meine Bash-Skript aussieht:

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

python my_script.py $VAR1 $VAR2 $VAR3 
1

EDIT:

ich es herausgefunden, ich einige weired Combo von Zeichen hatte, wurde die Linie nicht richtig übersetzt. Habe ich es aus

var = ($ (einige Befehle))

zu

var = (einige Befehle) // mit Backticks (noch den SO-Editor Lernen .. .)

Bash Flucht ist etwas Fahrt lol! An diejenigen, die antworteten, danke für Ihre Hilfe

Verwandte Themen