16. Appendice
*************


16.1. Modalità Interattiva
==========================

Ci sono due varianti del *REPL* interattivo. L'interprete di base
classico è supportato su tutte le piattaforme con capacità minime di
controllo di riga.

On Windows, or Unix-like systems with "curses" support, a new
interactive shell is used by default since Python 3.13. This one
supports color, multiline editing, history browsing, and paste mode.
To disable color, see Controlling color for details.  Function keys
provide some additional functionality. "F1" enters the interactive
help browser "pydoc". "F2" allows for browsing command-line history
with neither output nor the *>>>* and *...* prompts. "F3" enters
"paste mode", which makes pasting larger blocks of code easier. Press
"F3" to return to the regular prompt.

Quando si utilizza la nuova shell interattiva, si può uscire dalla
shell digitando "exit" o "quit". Non è necessario aggiungere le
parentesi di chiamata dopo questi comandi.

Se non si vuole usare la nuova shell interattiva, questa può essere
disabilitata tramite la variabile di ambiente "PYTHON_BASIC_REPL".


16.1.1. Gestione degli Errori
-----------------------------

Quando si verifica un errore, l'interprete stampa un messaggio di
errore e una traccia dello stack. In modalità interattiva, quindi
ritorna al prompt principale; quando l'input proviene da un file, esce
con uno stato di uscita diverso da zero dopo aver stampato la traccia
dello stack. (Le eccezioni gestite da una clausola "except" in
un'istruzione "try" non sono errori in questo contesto.) Alcuni errori
sono incondizionatamente fatali e causano un'uscita con uno stato di
uscita diverso da zero; questo si applica alle incoerenze interne e a
certi casi di esaurimento della memoria. Tutti i messaggi di errore
sono scritti sul flusso standard degli errori; l'output normale dei
comandi eseguiti è scritto sul flusso standard dell'output.

Digitare il carattere d'interruzione (di solito "Control"-"C" o
"Delete") al prompt principale o secondario cancella l'input e ritorna
al prompt principale. [1] Digitando un'interruzione mentre un comando
è in esecuzione si solleva l'eccezione "KeyboardInterrupt", che può
essere gestita da un'istruzione "try".


16.1.2. Script Eseguibili Python
--------------------------------

Nei sistemi Unix di tipo BSD, gli script Python possono essere resi
direttamente eseguibili, come gli script di shell, aggiungendo la riga

   #!/usr/bin/env python3

(supponendo che l'interprete sia nel "PATH" dell'utente) all'inizio
dello script e dando al file un permesso eseguibile. Il "#!" deve
essere i primi due caratteri del file. Su alcune piattaforme, questa
prima riga deve terminare con un fine riga in stile Unix ("'\n'"), non
con un fine riga in stile Windows ("'\r\n'"). Nota che il carattere
cancelleto, "'#'", è usato per iniziare un commento in Python.

Lo script può essere reso eseguibile, o avere i permessi, usando il
comando **chmod**.

   $ chmod +x myscript.py

Nei sistemi Windows, non esiste il concetto di "modalità eseguibile".
L'installatore Python associa automaticamente i file ".py" con
"python.exe" in modo che un doppio clic su un file Python lo esegua
come uno script. L'estensione può anche essere ".pyw"; in tal caso, la
finestra della console che appare normalmente viene soppressa.


16.1.3. Il File di Avvio Interattivo
------------------------------------

Quando usi Python in modalità interattiva, è spesso utile avere alcuni
comandi standard eseguiti ogni volta che l'interprete viene avviato.
Puoi fare ciò impostando una variabile di ambiente chiamata
"PYTHONSTARTUP" al nome di un file contenente i tuoi comandi di avvio.
Questo è simile alla funzionalità ".profile" delle shell Unix.

Questo file viene letto solo nelle sessioni interattive, non quando
Python legge i comandi da uno script, e non quando "/dev/tty" è dato
come fonte esplicita dei comandi (che altrimenti si comporta come una
sessione interattiva). Viene eseguito nello stesso namespace dove
vengono eseguiti i comandi interattivi, quindi gli oggetti che
definisce o importa possono essere usati senza qualificazioni nella
sessione interattiva. Puoi anche cambiare i prompt "sys.ps1" e
"sys.ps2" in questo file.

Se vuoi leggere un file di avvio aggiuntivo dalla directory corrente,
puoi programmare questo nel file di avvio globale usando il codice
come "if os.path.isfile('.pythonrc.py'):
exec(open('.pythonrc.py').read())". Se vuoi usare il file di avvio in
uno script, devi farlo esplicitamente nello 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. I Moduli di Personalizzazione
-------------------------------------

Python fornisce due hook per permetterti di personalizzarlo:
sitecustomize e usercustomize. Per vedere come funziona, devi prima
trovare la posizione della directory user site-packages. Avvia Python
ed esegui questo codice:

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

Ora puoi creare un file chiamato "usercustomize.py" in quella
directory e inserire ciò che vuoi in esso. Questo influenzerà ogni
invocazione di Python, a meno che non sia avviato con l'opzione "-s"
per disabilitare l'importazione automatica.

sitecustomize funziona allo stesso modo, ma è tipicamente creato da un
amministratore del computer nella directory globale site-packages e
viene importato prima di usercustomize. Per maggiori dettagli, vedi la
documentazione del modulo "site".

-[ Note a pie' di pagina ]-

[1] Un problema con il pacchetto GNU Readline potrebbe impedirlo.
