Wie zur übergabe von Variablen aus einem python-Skript für bash-Skript
Ich habe ein bash script, ein.sh , und Sie habe ich rufen Sie ein python-Skript b.py .
Das python-Skript berechnet etwas, und ich will, dass es einen Wert zurück, der wird später verwendet werden, ein.sh .
Ich weiß, dass ich tun kann,
In einem.sh:
var=`python b.py`
In b.py:
print x # when x is the value I want to pass
Aber das ist nicht so praktisch, weil ich auch drucken, andere Nachrichten, die in.b.py
Gibt es einen besseren Weg, es zu tun?
Edit:
Was ich jetzt mache ist nur
var=`python b.py | tail -n 1`
Bedeutet es, dass ich drucken kann viele Dinge in b.py, sondern nur die Letzte Zeile (der Letzte Befehl "drucken", sofern es sich nicht enthalten, "\n" in es) gespeichert in var.
Danke für die vielen Antworten!
- Naja, vielleicht haben Sie nicht tun konnte, das batch-Skript zu starty mit - alles tun, von Python, von wo aus die disctintion zwischen Daten und code wird immer klarer, was Sie nicht haben, um zu laichen einen neuen Prozess einfach zu Lesen, der einen skalaren Wert (wie die Antworten mit "Katze" unten), und so weiter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde es drucken um eine ausgewählte Datei auf der Kommandozeile dann würd ich bekommen, dass der Wert in der bash mit so etwas wie
cat
.Damit würdest du gehen:
[EDIT, noch eine Idee, basierend auf andere Antworten]
Ihre andere option ist, um Ihre Ausgabe zu formatieren, sorgfältig, so dass Sie können verwenden die bash-Funktionen wie
head
/tail
Rohr nur die ersten/letzten Zeilen in Ihrem nächsten Programm.Ich glaube, die Antwort ist
.py
.sh
Ich bin mir nicht sicher "besser", aber Sie könnte schreiben das Ergebnis in eine Datei dann Lesen Sie es zurück in die Bash und löschen es danach.
Dies ist definitiv hässlich, aber es ist etwas im Auge zu behalten, falls nichts anderes funktioniert der trick.
In Ihrem python-Skript, umleiten, andere Nachrichten, die an stderr, und drucken
x
auf stdout:in der bash-Skript:
Auch, wenn x eine ganze Zahl zwischen 0,255, können Sie mit exit-code übergeben es an die bash:
in der bash:
Bitte beachten Sie, dass exit-code wird verwendet, um Fehler anzeigt, 0 bedeutet kein Fehler, und das bricht die Konvention.
Auf bash
backsticks works
Ich in der Regel tun, so etwas wie
Schreiben Sie die Ausgabe in eine temporäre Datei und shell gelesen und die Datei löschen. Dies ist sogar weniger komfortabel, behält sich jedoch vor, stdout zur Kommunikation mit dem Benutzer.
Alternativ können Sie verwenden irgendeine Art von format für stdout: die ersten n Zeilen sind bestimmte Variablen, der rest wird auch von der übergeordneten shell an den Benutzer. Auch nicht bequem, aber vermeidet die Verwendung von tempfiles.