Wiem, że mogę uruchomić skrypt w języku Python z mojego skryptu bash, używając następującego:
python python_script.py
Ale co jeśli chciałbym przekazać zmienną / argument do mojego skryptu Pythona z mojego skryptu bash. Jak mogę to zrobić?
Zasadniczo bash opracuje nazwę pliku, a następnie Python go załaduje, ale muszę wysłać nazwę pliku z bash do pythona, kiedy go wywołam.
python python_script.py
w swojej domyślnej powłoce w Debianie, używasz już basha ... więc po prostu zrób to w swoim skrypcie bash:python python_script.py arg1 arg2 ...
Odpowiedzi:
Aby wykonać skrypt Pythona w skrypcie bash, musisz wywołać to samo polecenie, które zrobiłbyś w terminalu. Na przykład
> python python_script.py var1 var2
Aby uzyskać dostęp do tych zmiennych w Pythonie, będziesz potrzebować
import sys print sys.argv[0] # prints python_script.py print sys.argv[1] # prints var1 print sys.argv[2] # prints var2
źródło
Posługiwać się
python python_script.py filename
oraz w swoim skrypcie Pythona
import sys print sys.argv[1]
źródło
Oprócz
sys.argv
tego spójrz również na moduł argparse , który pomaga definiować opcje i argumenty dla skryptów.źródło
Wbudowana opcja:
Zawiń kod Pythona w funkcję bash.
#!/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
Użyj zmiennych środowiskowych, aby przekazać dane do osadzonego skryptu w języku Python.
#!/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
źródło
użyj w skrypcie:
echo $(python python_script.py arg1 arg2) > /dev/null
lub
python python_script.py "string arg" > /dev/null
Skrypt zostanie wykonany bez wyjścia.
źródło
Mam skrypt bash, który wywołuje małą procedurę w języku Python, aby wyświetlić okno komunikatu. Ponieważ muszę użyć killall, aby zatrzymać skrypt Pythona, nie mogę użyć powyższej metody, ponieważ oznaczałoby to uruchomienie killall python, który mógłby usunąć inne programy w Pythonie, więc używam
pythonprog.py "$argument"
& # & # Zwraca kontrolę bezpośrednio do skryptu bash, więc musi znajdować się poza znakami odwrotnymi. Podgląd tego komunikatu z jakiegoś powodu pokazuje go bez "" "po obu stronach polecenia.Tak długo, jak skrypt pythona będzie uruchamiany z cli według nazwy, a nie python pythonprog.py, działa to w skrypcie. Jeśli potrzebujesz więcej niż jednego argumentu, po prostu użyj spacji między nimi w cudzysłowie.
źródło
i spójrz na moduł getopt . U mnie działa całkiem nieźle!
źródło