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.

Author: Eric Leschinski, 2010-10-27

7 answers

Python tutorial wyjaśnia to :

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']
 305
Author: SilentGhost,
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)

 75
Author: Ryan Mentley,
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 
 36
Author: Charles P.,
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
 34
Author: Michael Dorner,
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.

 18
Author: allsyed,
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.

 5
Author: lvadim01,
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

 2
Author: Rohan Sadale,
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