it-swarm.dev

Wywołanie Python z bash z argumentem

Wiem, że mogę uruchomić skrypt python z mojego skryptu bash przy użyciu następujących poleceń:

python python_script.py

Ale co jeśli chciałbym przekazać zmienną/argument do mojego python z mojego skryptu bash. Jak mogę to zrobić?

Zasadniczo bash opracuje nazwę pliku, a następnie python prześle go, ale muszę wysłać nazwę pliku z bash do python kiedy go wywołam).

66
Jimmy

Aby wykonać skrypt python w skrypcie bash, musisz wywołać to samo polecenie, co w terminalu.

> python python_script.py var1 var2

Aby uzyskać dostęp do tych zmiennych w ramach python 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
93
duckman_1991

Posługiwać się

python python_script.py filename

i w twoim Python

import sys
print sys.argv[1]
20
NPE

Oprócz sys.argv , spójrz także na moduł argparse , który pomaga zdefiniować opcje i argumenty dla skryptów.

Moduł argparse ułatwia pisanie przyjaznych interfejsów wiersza poleceń.

15
miku

Opcja osadzona:

Wrap python w funkcji 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 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

5
user77115

Mam skrypt bash, który wywołuje małą procedurę python, aby wyświetlić okno komunikatu. Ponieważ muszę użyć killall, aby zatrzymać skrypt python, nie mogę użyj powyższej metody, ponieważ oznaczałoby to uruchomienie killall python, który mógłby usunąć inne programy python, więc używam

pythonprog.py "$argument" & # Sterowanie & zwraca bezpośrednio do skryptu bash, więc musi znajdować się poza backticks. Podgląd tego komunikatu pokazuje go z jakiegoś powodu bez żadnej strony polecenia.

Tak długo, jak skrypt python będzie uruchamiany z cli według nazwy zamiast 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.

1
Dave Thebuskeruk

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 danych wyjściowych.

0
burseaner