16. Dodatek

16.1. Tryb interaktywny

16.1.1. Przechwytywanie błędów

When an error occurs, the interpreter prints an error message and a stack trace. In interactive mode, it then returns to the primary prompt; when input came from a file, it exits with a nonzero exit status after printing the stack trace. (Exceptions handled by an except clause in a try statement are not errors in this context.) Some errors are unconditionally fatal and cause an exit with a nonzero exit status; this applies to internal inconsistencies and some cases of running out of memory. All error messages are written to the standard error stream; normal output from executed commands is written to standard output.

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.5

(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.

If you want to read an additional start-up file from the current directory, you can program this in the global start-up file using code like if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read()). If you want to use the startup file in a script, you must do this explicitly in the script:

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. The Customization Modules

Python provides two hooks to let you customize it: sitecustomize and usercustomize. To see how it works, you need first to find the location of your user site-packages directory. Start Python and run this code:

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

Now you can create a file named usercustomize.py in that directory and put anything you want in it. It will affect every invocation of Python, unless it is started with the -s option to disable the automatic import.

sitecustomize works in the same way, but is typically created by an administrator of the computer in the global site-packages directory, and is imported before usercustomize. See the documentation of the site module for more details.

Przypisy