Jak uzyskać dostęp do argumentów wiersza poleceń w Pythonie?
Używam Pythona do tworzenia ustawień mojego projektu, ale potrzebuję pomocy w uzyskaniu argumentów linii poleceń.
Próbowałem tego na terminalu:
$python myfile.py var1 var2 var3
W moim pliku Pythona chcę użyć wszystkich zmiennych, które są wprowadzane.
7 answers
import sys
print(sys.argv)
Dokładniej, jeśli uruchomisz python example.py one two three
:
>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 20:36:27
import sys
sys.argv[1:]
Wyświetli listę argumentów (bez nazwy pliku Pythona)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-27 13:30:57
Kod Pythona:
import sys
# main
param_1= sys.argv[1]
param_2= sys.argv[2]
param_3= sys.argv[3]
print 'Params=', param_1, param_2, param_3
Inwokacja:
$python myfile.py var1 var2 var3
Wyjście:
Params= var1 var2 var3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-12 23:27:56
Gorąco polecam argparse
który pochodzi z Pythona 2.7 i Później.
Moduł argparse
zmniejsza kod płyty kotła i sprawia, że Twój kod jest bardziej wytrzymały, ponieważ moduł obsługuje wszystkie standardowe przypadki użycia (w tym podkomendne), generuje pomoc i użytkowanie, sprawdza i dezynfekuje dane wejściowe użytkownika - wszystkie rzeczy, o które musisz się martwić, gdy używasz podejścia sys.argv
. I jest darmowy (wbudowany).
Oto mały przykład:
import argparse
parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)
I wyjście dla python prog.py -h
usage: simple_example [-h] counter
positional arguments:
counter counter will be increased by 1 and printed.
optional arguments:
-h, --help show this help message and exit
I dla python prog.py 1
Jak można się spodziewać:
2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 10:50:36
Możesz użyć sys.argv
, Aby uzyskać argumenty jako listę.
Jeśli potrzebujesz dostępu do poszczególnych elementów, możesz użyć
sys.argv[i]
Gdzie i
jest indeksem, 0
da ci wykonywaną nazwę pliku Pythona. Każdy indeks po tym są argumenty przekazywane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-11 16:16:04
Jeśli nazwiesz to tak: $ python myfile.py var1 var2 var3
import sys
var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]
Podobnie jak tablice masz również {[2] } który jest zawsze bieżącym katalogiem roboczym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-11 15:47:47
Kilka dodatkowych rzeczy, które mogę wymyślić.
As @allsyed said sys.argv podaje listę komponentów (w tym nazwę programu), więc jeśli chcesz znać liczbę elementów przekazywanych przez linię poleceń, możesz użyć metody len () do jej określenia. Na tej podstawie można zaprojektować komunikaty o wyjątkach/błędach, jeśli użytkownik nie przekazał określonej liczby parametrów.
Również jeśli szukasz lepszego sposobu na obsługę argumentów linii poleceń, proponuję spojrzeć na https://docs.python.org/2/howto/argparse.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 21:17:02