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.

W systemach Windows lub podobnych do Unix z obsługą "curses", nowy
interaktywny shell jest używany domyślnie od Pythona 3.13. 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ć.
