# 16. Dodatek

## 16.1. Tryb interaktywny

Istnieją dwa warianty interaktywnego REPL. Klasyczny podstawowy interpreter jest obsługiwany na wszystkich platformach z minimalnymi możliwościami kontroli linii.

Od Pythona 3.13 nowy interaktywny shell jest używany domyślnie. Obsługuje on kolor, edytowanie wieloliniowe, przeglądanie historii i tryb wklejania. Aby wyłączyć kolor, zobacz Controlling color po szczegóły. Klawisze funkcyjne zapewniają dodatkową funkcjonalność. `F1` uruchamia interaktywną przeglądarkę pomocy `pydoc`. `F2` pozwala na przeglądanie historii wiersza poleceń bez wyjścia ani podpowiedzi >>> i …. `F3` uruchamia „tryb wklejania”, który ułatwia wklejanie większych bloków kodu. Naciśnij `F3`, aby wrócić do zwykłego promptu.

Podczas korzystania z nowego interaktywnego shell, należy wyjść z shell wpisując `exit` lub `quit`. Dodawanie nawiasów po tych poleceniach nie jest wymagane.

Jeśli nowy interaktywny shell nie jest pożądany, można go wyłączyć za pośrednictwem zmiennej środowiskowej `PYTHON_BASIC_REPL`.

### 16.1.1. Przechwytywanie błędów

Gdy wystąpi błąd, interpreter wyświetla komunikat błędu i ślad stosu. W trybie interaktywnym zwraca je do wiersza polecenia; jeżeli wejście pochodzi z pliku, na wyjściu generowany jest kod wyjścia różny od zera po wyświetleniu śladu stosu. (Błędy przechwycone przez słowo kluczowe `except` w poleceniu `try` nie są błędami w tym kontekście). Niektóre błędy są bezwarunkowo krytyczne i wywołują wyjście z programu z kodem wyjścia różnym od zera; dotyczy to wewnętrznych niezgodności i - w niektórych przypadkach - przepełnienia pamięci. Wszystkie komunikaty błędów są wyświetlane na standardowym wyjściu błędów; zazwyczaj jest to normalne wyjście z wykonywania komend.

Wpisanie znaku przerwania (zazwyczaj `Control`-`C` lub `Delete`) w pierwszorzędny lub drugorzędny prompt anuluje tryb wpisywania i wraca do pierwszorzędnego prompta. [1] Wpisanie znaku przerwania podczas wykonywania komendy wywołuje wyjątek `KeyboardInterrupt`, który może być obsłużony instrukcją `try`.

### 16.1.2. Wykonywalne skrypty Pythona

W systemach uniksowych podobnych do BSD, skrypty Pythona można uczynić bezpośrednio wykonywalnymi, jak skrypty shell, przez dodanie linii

    #!/usr/bin/env python3

(zakładając, że interpreter jest na zmiennej `PATH` użytkownika) na początku skryptu i nadając plikowi tryb wykonywalny. `#!` muszą być pierwszymi dwoma znakami pliku. Na niektórych platformach ta pierwsza linia musi kończyć się uniksowym zakończeniem linii (`'\n'`), nie windowsowym zakończeniem linii (`'\r\n'`). Zwróć uwagę, że znak kratki, czy krzyżyka, `'#'`, jest używany do rozpoczęcia komentarza w Pythonie.

Skryptowi można nadać tryb wykonywalny, lub permission, przy użyciu komendy chmod.

    $ chmod +x myscript.py

W systemach Windows nie wyróżnia się „trybu wykonywalnego”. Instalator Pythona automatycznie powiązuje pliki `.py` z `python.exe`, żeby podwójne kliknięcie w plik Pythona uruchomiło go jako skrypt. Rozszerzeniem może być również `.pyw`. W tym przypadku okno konsoli, które normalnie się pojawia, zostanie ukryte.

### 16.1.3. Plik interaktywnego uruchomienia

Gdy używasz Pythona w trybie interaktywnym, często wygodne jest wykonywać jakieś standardowe komendy za każdym razem, gdy uruchamia się interpreter. Możesz to zrobić ustawiając zmienną środowiskową o nazwie `PYTHONSTARTUP` na nazwę pliku zawierającego twoje komendy uruchomieniowe. Jest to podobne do funkcji `.profile` shellów uniksowych.

Ten plik jest czytany tylko w sesjach interaktywnych, nie gdy Python czyta komendy ze skryptu i nie gdy `/dev/tty` jest podany jako źródło komend (które zachowuje się jak sesja interaktywna). Jest wykonywany w tym samym namespace’ie, w którym wykonują się interaktywne komendy, więc obiekty, które definiuje lub importuje mogą być używane bezpośrednio w interaktywnej sesji. Możesz również zmienić znaki prompt `sys.ps1` i `sys.ps2` w tym pliku.

Jeśli chcesz odczytać dodatkowy plik rozruchowy z bieżącego katalogu, możesz zaprogramować to w globalnym pliku rozruchowym używając kodu takiego jak `if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())`. Jeśli chcesz użyć pliku rozruchowego w skrypcie, musisz to zrobić jawnie w skrypcie:

    import os
    filename = os.environ.get('PYTHONSTARTUP')
    if filename and os.path.isfile(filename):
        with open(filename) as fobj:
            startup_file = fobj.read()
        exec(startup_file)

### 16.1.4. Moduły dostosowywania

Python udostępnia dwa haki umożliwiające jego dostosowanie: sitecustomize i usercustomize. Aby zobaczyć jak to działa, należy najpierw znaleźć lokalizację katalogu pakietów użytkownika. Uruchom Python i uruchom ten kod:

    >>> import site
    >>> site.getusersitepackages()
    '/home/user/.local/lib/python3.x/site-packages'

Teraz możesz stworzyć plik o nazwie `usercustomize.py` w tym katalogu i umieścić w nim co tylko chcesz. Będzie to miało wpływ na każde wywołanie Pythona, chyba że zostanie on uruchomiony z opcją `-s`, aby wyłączyć automatyczny import.

sitecustomize działa w ten sam sposób, ale jest zwykle tworzony przez administratora komputera w globalnym katalogu pakietów i jest importowany przed usercustomize. Więcej szczegółów można znaleźć w dokumentacji `site` moduł .

Przypisy

[1]

Problem z pakietem GNU Readline może w tym przeszkodzić.