Pragnę zauważyć, że poprzednie odpowiedzi zawierały wiele założeń dotyczących wiedzy użytkownika. Ta odpowiedź jest próbą odpowiedzi na pytanie na wyższym poziomie samouczka.
Dla każdego wywołania Pythona sys.argvjest automatycznie lista łańcuchów reprezentujących argumenty (oddzielone spacjami) w linii poleceń. Nazwa pochodzi z konwencji programowania C, w której argv i argc reprezentują argumenty wiersza poleceń.
Będziesz chciał dowiedzieć się więcej o listach i ciągach znaków, gdy będziesz zaznajamiać się z Pythonem, ale w międzyczasie, oto kilka rzeczy, które warto wiedzieć.
Możesz po prostu utworzyć skrypt, który wypisze argumenty tak, jak są one reprezentowane. Wyświetla również liczbę argumentów, używając lenfunkcji z listy.
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
Skrypt wymaga Pythona 2.6 lub nowszego. Jeśli wywołasz ten skrypt print_args.py, możesz wywołać go z różnymi argumentami, aby zobaczyć, co się stanie.
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
Jak widać, argumenty wiersza poleceń zawierają nazwę skryptu, ale nie nazwę interpretera. W tym sensie Python traktuje skrypt jako plik wykonywalny. Jeśli chcesz znać nazwę pliku wykonywalnego (w tym przypadku python), możesz użyć sys.executable.
Z przykładów widać, że możliwe jest otrzymanie argumentów, które zawierają spacje, jeśli użytkownik wywołał skrypt z argumentami ujętymi w cudzysłowy, więc otrzymujemy listę argumentów podaną przez użytkownika.
Teraz w swoim kodzie Pythona możesz użyć tej listy ciągów jako danych wejściowych do swojego programu. Ponieważ listy są indeksowane za pomocą liczb całkowitych zaczynających się od zera, można uzyskać poszczególne elementy za pomocą składni list [0]. Na przykład, aby uzyskać nazwę skryptu:
script_name = sys.argv[0] # this will always work.
Chociaż jest to interesujące, rzadko musisz znać nazwę swojego skryptu. Aby uzyskać pierwszy argument po skrypcie dla nazwy pliku, możesz wykonać następujące czynności:
filename = sys.argv[1]
Jest to bardzo powszechne użycie, ale pamiętaj, że zakończy się niepowodzeniem z błędem IndexError, jeśli nie podano argumentu.
Ponadto Python umożliwia odwoływanie się do wycinka listy, więc aby uzyskać kolejną listę tylko argumentów dostarczonych przez użytkownika (ale bez nazwy skryptu), możesz zrobić
user_args = sys.argv[1:] # get everything after the script name
Dodatkowo Python umożliwia przypisanie sekwencji elementów (w tym list) do nazw zmiennych. Więc jeśli oczekujesz, że użytkownik zawsze będzie podawał dwa argumenty, możesz przypisać te argumenty (jako łańcuchy) do dwóch zmiennych:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
Tak więc, odpowiadając na twoje konkretne pytanie, sys.argv[1]reprezentuje pierwszy argument wiersza poleceń (jako a string) dostarczony do danego skryptu. Nie będzie monitować o wprowadzenie danych, ale zakończy się niepowodzeniem z błędem IndexError, jeśli w wierszu poleceń po nazwie skryptu nie zostaną podane żadne argumenty.