So übergeben Sie Variablen vom Python-Skript zum Bash-Skript

8

Ich habe ein Bash-Skript, a.sh, und darin habe ich ein Python-Skript b.py aufgerufen. Das Python-Skript berechnet etwas, und ich möchte, dass es einen Wert zurückgibt, der später in a.sh verwendet wird. Ich weiß, ich kann

tun

In a.sh:

%Vor%

In b.py:

%Vor%

Aber das ist nicht so praktisch, weil ich auch andere Nachrichten in b.py

drucke

Gibt es einen besseren Weg?

Bearbeiten:

Was ich gerade mache ist nur

%Vor%

Es bedeutet, dass ich viele Dinge innerhalb von b.py ausdrucken kann, aber nur die letzte Zeile (der letzte Druckbefehl, vorausgesetzt, sie enthält nicht \ n ") wird in var.

gespeichert

Danke für alle Antworten!

    
Rivka 23.11.2010, 14:38
quelle

6 Antworten

7

Ich würde es in eine Datei drucken, die in der Befehlszeile ausgewählt wurde, dann würde ich diesen Wert in bash mit etwas wie cat bekommen.

Also würden Sie gehen:

%Vor%

[EDIT, eine andere Idee, die auf anderen Antworten basiert]

Ihre andere Möglichkeit besteht darin, Ihre Ausgabe sorgfältig zu formatieren, damit Sie bash-Funktionen wie head / tail verwenden können, um nur die ersten / letzten Zeilen in Ihr nächstes Programm zu leiten.

    
Crisfole 23.11.2010, 14:42
quelle
3

Ich glaube, die Antwort ist

.py

%Vor%

.sh

%Vor%     
Jakob Bowyer 23.11.2010 14:50
quelle
1

Ich bin mir nicht sicher über "besser", aber Sie könnten das Ergebnis in eine Datei schreiben, dann wieder in Bash lesen und danach löschen.

Das ist definitiv hässlich, aber es ist etwas, das man im Hinterkopf behalten sollte, wenn nichts anderes der Trick ist.

    
Cameron 23.11.2010 14:43
quelle
1

Leiten Sie in Ihrem Python-Skript weitere Nachrichten an stderr um und drucken Sie x auf stdout:

%Vor%

im Bash-Skript:

%Vor%

Auch wenn x eine Ganzzahl zwischen 0,255 ist, können Sie exit-Code verwenden, um es an die Bash zu übergeben:

%Vor%

in bash:

%Vor%

Bitte beachten Sie, dass Exit-Code verwendet wird, um Fehler anzuzeigen, 0 bedeutet kein Fehler, und dies bricht die Konvention.

    
khachik 23.11.2010 14:46
quelle
1

Auf bash backsticks works

Normalerweise mache ich etwas wie

%Vor%     
CESCO 03.01.2016 13:13
quelle
0

Sie können die Ausgabe in eine temporäre Datei schreiben und die Shell diese Datei lesen und löschen lassen. Dies ist noch weniger bequem, aber reserviert stdout für die Kommunikation mit dem Benutzer.

Alternativ können Sie eine Art von Format für stdout verwenden: Die ersten n Zeilen sind bestimmte Variablen, der Rest wird von der übergeordneten Shell an den Benutzer zurückgegeben. Auch nicht praktisch, aber vermeidet die Verwendung von Templateien.

    
Martin v. Löwis 23.11.2010 14:42
quelle

Tags und Links