it-swarm.com.de

Rufen Sie Python script from bash with argument auf

Ich weiß, dass ich mit meinem Bash-Skript ein python Skript wie folgt ausführen kann:

python python_script.py

Aber was ist, wenn ich eine Variable/ein Argument aus meinem Bash-Skript an mein python Skript übergeben möchte. Wie kann ich das tun?

Grundsätzlich ermittelt bash einen Dateinamen und lädt ihn dann python hoch, aber ich muss den Dateinamen von bash an python senden, wenn ich ihn aufrufe.

66
Jimmy

Um ein python Skript in einem Bash-Skript auszuführen, müssen Sie denselben Befehl aufrufen, den Sie in einem Terminal ausführen würden. Zum Beispiel

> python python_script.py var1 var2

Für den Zugriff auf diese Variablen in python benötigen Sie

import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2
93
duckman_1991

Verwenden

python python_script.py filename

und in Ihrem Python Skript

import sys
print sys.argv[1]
20
NPE

Neben sys.argv , schauen Sie sich auch das argparse Modul an, mit dessen Hilfe Sie Optionen und Argumente für Skripte definieren können.

Das argparse-Modul erleichtert das Schreiben benutzerfreundlicher Befehlszeilenschnittstellen.

15
miku

Eingebettete Option:

python Code in eine Bash-Funktion einbinden.

#!/bin/bash

function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}

# Call it
current_datetime

# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT

Verwenden Sie Umgebungsvariablen, um Daten an Ihr eingebettetes python Skript zu übergeben.

#!/bin/bash

function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}

# Do it one way
line 80

# Do it another way
echo $(line 80)

http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html

5
user77115

Ich habe ein Bash-Skript, das eine kleine python - Routine aufruft, um ein Nachrichtenfenster anzuzeigen. Da ich killall verwenden muss, um das python - Skript zu stoppen, kann ich nicht Verwenden Sie die obige Methode, da dies dann bedeuten würde, dass Sie killall python ausführen, wodurch andere python) - Programme entfernt werden könnten, die ich verwende

pythonprog.py "$argument" & # Das & gibt die Kontrolle direkt an das Bash-Skript zurück, muss sich also außerhalb der Backticks befinden. Die Vorschau dieser Nachricht zeigt sie aus irgendeinem Grund ohne "` "beide Seiten des Befehls an.

Solange das python Skript von der cli mit Namen ausgeführt wird und nicht python pythonprog.py), funktioniert dies innerhalb des Skripts. Wenn Sie mehr als ein Argument benötigen Verwenden Sie einfach ein Leerzeichen zwischen den Anführungszeichen.

1

verwenden Sie im Skript:

echo $(python python_script.py arg1 arg2) > /dev/null

oder

python python_script.py "string arg"  > /dev/null

Das Skript wird ohne Ausgabe ausgeführt.

0
burseaner