sys

Dostęp do interpretera: argumenty wiersza poleceń, kończenie programu, wersja Pythona i strumienie.

Na tej stronie

Przykład

#
Python
import sys

if len(sys.argv) < 2:
    print("Użycie: python powitanie.py IMIĘ")
    sys.exit(1)

name = sys.argv[1]
print(f"Cześć, {name}!")
print(sys.argv)
Wynik
Cześć, Ania!
['powitanie.py', 'Ania']

Wynik dla polecenia python powitanie.py Ania. Uruchomiony bez argumentu program wypisze instrukcję użycia i zakończy się z kodem 1.

Definicja i zastosowanie

#

Moduł sys daje dostęp do informacji i ustawień samego interpretera Pythona. Najczęściej używa się z niego listy sys.argv z argumentami wiersza poleceń oraz funkcji sys.exit(), która kończy program z podanym kodem wyjścia.

sys.argv[0] to nazwa uruchomionego skryptu, a kolejne elementy to argumenty wpisane po niej, zawsze jako napisy. Kod wyjścia 0 oznacza sukces, a każda inna liczba błąd. Odczytują go skrypty powłoki i narzędzia, które uruchamiają Twój program.

Moduł udostępnia też standardowe strumienie sys.stdin, sys.stdout i sys.stderr, wersję interpretera w sys.version_info, nazwę systemu w sys.platform oraz listę katalogów przeszukiwanych przy imporcie w sys.path.

Składnia

#
Składnia
import sys

sys.argv
sys.exit(kod)
sys.version_info
sys.stderr

Więcej przykładów

#
Wersja Pythona i limit rekurencji
Python
import sys

if sys.version_info >= (3, 10):
    print("Wersja Pythona jest wystarczająca")
else:
    print("Ten program wymaga Pythona 3.10 lub nowszego")

print(sys.version_info.major)
print(sys.getrecursionlimit())
Wynikzapisany wynik, możesz go sprawdzić
Wersja Pythona jest wystarczająca
3
1000

getrecursionlimit() zwraca maksymalną głębokość wywołań rekurencyjnych, domyślnie 1000.

Błędy na stderr i kod wyjścia
Python
import sys

def fail(message):
    print(f"Błąd: {message}", file=sys.stderr)
    sys.exit(1)

print("Wczytuję dane...")
fail("brak pliku kurs.json")
print("Ta linia się nie wykona")
Wynikzapisany wynik, możesz go sprawdzić
Wczytuję dane...
Błąd: brak pliku kurs.json

Druga linia trafia do strumienia błędów (stderr), więc przekierowanie python app.py > log.txt zapisze do pliku tylko pierwszą. Program kończy się z kodem 1.

Dobre praktyki

#
  • Do rozbudowanych argumentów wiersza poleceń, z opcjami i automatyczną pomocą, używaj modułu argparse zamiast ręcznego czytania sys.argv.
  • Argumenty z sys.argv są napisami. Liczby zamieniaj przez int() i obsłuż niepoprawną wartość.
  • Komunikaty o błędach wypisuj na sys.stderr, żeby nie mieszały się z właściwym wynikiem programu.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.