3.1 sys -- Parametri e funzioni specifiche per il sistema

Questo modulo fornisce l'accesso ad alcune variabili usate o mantenute dall'interprete, e a funzioni che interagiscono fortemente con l'interprete stesso. È sempre disponibile.

argv
La lista degli argomenti della riga di comando passati a uno script Python. argv[0] è il nome dello script (dipende dal sistema operativo che questi venga indicato da un percorso completo o meno). Se il comando viene eseguito usando l'opzione -c dalla riga di comando dell'interprete, argv[0] viene impostata con il contenuto della stringa '-c'. Se nessun nome di script viene passato all'interprete Python, argv ha lunghezza zero.

byteorder
Un indicatore dell'ordine nativo del byte. Questo può avere il valore 'big' su piattaforme big-endian (il byte più significativo prima) e 'little' su piattaforme little-endian (byte meno significativo prima). Nuovo nella versione 2.0.

builtin_module_names
Una tupla di stringhe che riporta i nomi di tutti i moduli compilati dentro questo interprete Python. (Questa informazione non è disponibile in nessun altro modo - modules.keys() riporta solo i moduli importati).

copyright
Una stringa contenente il copyright proprio dell'interprete Python.

dllhandle
Intero indicante la gestione della DLL di Python. Disponibilità: Windows.

displayhook( valore)
Se valore è diverso da None, questa funzione lo stampa su sys.stdout e lo salva in __builtin__._.

sys.displayhook viene chiamata sul risultato della valutazione di un'espressione inserita in una sessione interattiva di Python. La visualizzazione di questi valori può essere personalizzata assegnando a sys.displayhook un'altra funzione con un solo argomento.

excepthook( tipo, valore, traceback)
Questa funzione stampa su sys.stderr un dato traceback [NdT:traccia dello stack] e l'eccezione che lo ha creato.

Quando un'eccezione viene sollevata e non raccolta, l'interprete chiama sys.excepthook con tre argomenti: la classe dell'eccezione, l'istanza dell'eccezione ed un oggetto traceback. In una sessione interattiva ciò si verifica appena prima che il controllo venga restituito al prompt; in un programma Python, invece, appena prima che il programma stesso termini. La gestione di eccezioni di così alto livello può essere personalizzata assegnando a sys.excepthook un'altra funzione con tre argomenti.

__displayhook__
__excepthook__
Questi oggetti contengono i valori originali di displayhook e excepthook all'avvio del programma. Essi vengono salvati in modo tale che displayhook e excepthook possano venire ripristinati nel caso vengano sostituiti con degli oggetti corrotti.

exc_info( )
Questa funzione restituisce una tupla di tre valori, che forniscono informazioni riguardanti l'eccezione correntemente gestita. L'informazione restituita è specifica sia del thread che del frame dello stack corrente. Se quest'ultimo non sta gestendo un'eccezione, l'informazione viene presa dal frame dello stack chiamante, o dal suo chiamante, e così via fino a quando viene trovato un frame dello stack che sta gestendo un'eccezione. Qui, ``che sta gestendo un'eccezione'' deve intendersi ``che sta eseguendo o che ha eseguito una clausola d'eccezione''. Di ogni frame dello stack, è accessibile soltanto l'informazione riguardante l'eccezione gestita più di recente.

Se nessuna eccezione viene momentaneamente gestita da qualche parte sullo stack, viene restituita una tupla contenente tre valori None. Altrimenti, i valori restituiti sono ((tipo, valore, traceback)). Il loro significato è il seguente: tipo riceve il tipo dell'eccezione che si sta gestendo (un oggetto classe); valore riceve il cosiddetto parametro dell'eccezione (il suo valore associato o il secondo argomento da sollevare, che è sempre un'istanza di classe se il tipo dell'eccezione è un oggetto classe); traceback riceve un oggetto di tipo traceback (cfr. Reference Manual) che comprende lo stack della chiamata a partire dal punto in cui si è verificata originariamente l'eccezione.

Se viene chiamata exc_clear(), questa funzione restituisce tre valori None fino a quando non viene sollevata un'altra eccezione nel thread corrente oppure lo stack d'esecuzione non ritorna a un frame (d'esecuzione) dove viene gestita un'altra eccezione.

Assegnare il valore di ritorno di traceback ad una variabile locale in una funzione che stia gestendo un'eccezione provocherà un riferimento circolare. Ciò impedirà che qualsiasi cosa, referenziata da una variabile locale nella stessa funzione oppure da traceback, venga trattata dal garbage-collector. Dal momento che la maggior parte delle funzioni non ha bisogno di accedere al valore di traceback, la soluzione migliore è quella di usare qualcosa del tipo exctype, value = sys.exc_info()[:2], per estrarre soltanto il tipo e il valore dell'eccezione. Se si ha veramente bisogno del traceback, assicuratevi di eliminarlo dopo l'uso (la cosa migliore sarebbe un'istruzione try ... finally) oppure chiamare exc_info() all'interno di una funzione che non gestisca lei stessa un'eccezione. Note: A partire dalla versione 2.2 di Python, tali circoli viziosi vengono automaticamente corretti quando la garbage collection viene abilitata e divengono irrangiungibili, ma rimane comunque più efficiente evitarne la creazione.

exc_clear( )
Questa funzione cancella tutte le informazioni relative all'eccezione corrente oppure all'ultima verificatasi nel thread corrente. Dopo una chiamata a questa funzione, exc_info() restituirà tre valori None, fino a quando non viene sollevata un'altra eccezione nel thread corrente oppure lo stack d'esecuzione ritorna ad un frame (d'esecuzione) dove si sta gestendo un'altra eccezione.

Questa funzione è necessaria soltanto in poche ed oscure situazioni. Queste includono sistemi di registrazione e gestione di errori, che restituiscono informazioni sull'ultima eccezione oppure su quella corrente. La funzione può anche venire usata anche per cercare di liberare risorse e dare l'avvio alla terminazione di un oggetto, sebbene non esiste garanzia su quali oggetti verranno liberati, se ve ne sono. Nuovo nella versione 2.3.

exc_type
exc_value
exc_traceback
Deprecato dalla versione 1.5 di Python. Usate piuttosto exc_info().
Poichè queste sono variabili globali, non sono specifiche del corrente thread, quindi il loro uso non è sicuro in un programma multi-threaded. Quando nessuna eccezione viene gestita, exc_type viene impostato su None e gli altri due restano indefiniti.

exec_prefix
Una stringa che fornisce il prefisso in cui viene situata la directory specifica dove i file Python, in funzione della piattaforma in uso, vengono installati. In modo predefinito, la stringa è '/usr/local'. Può venire impostata al momento della compilazione con l'argomento --exec-prefix nello script configure. Specificatamente, tutti i file di configurazione (es. il file header pyconfig.h) vengono installati nella directory exec_prefix + '/lib/pythonversion/config' e i moduli di libreria condivisi in exec_prefix + '/lib/pythonversion/lib-dynload', dove version è uguale a version[:3].

executable
Una stringa che fornisce il nome dell'eseguibile binario per l'interprete Python, nei sistemi dove questo ha senso.

exit( [arg])
Esce da Python. Viene implementata sollevando l'eccezione SystemExit, cosicché le azioni di pulizia specificate dalle clausole finally delle istruzioni try vengono eseguite, ed è possibile intercettare il tentativo di uscita ad un livello più esterno. L'argomento facoltativo arg può essere un intero che fornisce lo status d'uscita (predefinito è zero) o un altro tipo di oggetto. Se è un intero, zero viene considerato ``terminato con successo'' e qualsiasi valore diverso da zero viene considerato ``terminato in modo anomalo'' da shell e simili. Molti sistemi richiedono che tale valore sia compreso nell'intervallo 0-127, altrimenti producono risultati indefiniti. Alcuni sistemi hanno una convenzione per assegnare uno specifico significato ai codici di uscita, ma sono generalmente poco sviluppati; i programmi Unix generalmente usano il 2 per errori di sintassi da riga di comando e 1 per tutti gli altri tipi di errore. Se un altro tipo di oggetto viene passato, None è equivalente a passare zero, qualsiasi altro oggetto viene stampato sullo sys.stderr, e il risultato nel codice di uscita è 1. In particolare, sys.exit("messaggio di errore") è la maniera più veloce di uscire da un programma quando si verifica un errore.

exitfunc
Questo valore non viene attualmente definito dal modulo, ma può venire impostato dall'utente (o da un programma) per specificare un'azione di pulizia all''uscita del programma. Quando impostato, dovrebbe essere una funzione senza parametri. Questa funzione verrà chiamata quando l'interprete esce. Solamente una funzione può venire installata in questo modo; per consentire che alla fine del programma vengano chiamate funzioni multiple, usate il modulo atexit. Note: La funzione exit non viene chiamata quando il programma è chiuso da un segnale, quando viene intercettato un errore fatale in Python, o quando viene chiamata os._exit().

getcheckinterval( )
Restituisce il ''check interval'' dell'interprete; vedete setcheckinterval(). Nuovo nella versione 2.3.

getdefaultencoding( )
Restituisce il nome della corrente stringa predefinita per la codifica, usata dall'implementazione Unicode. Nuovo nella versione 2.0.

getdlopenflags( )
Restituisce il corrente valore delle opzioni [NdT: flag] che vengono usate per le chiamate dlopen(). Le opzioni costanti vengono definite nei moduli dl e DLFCN. Disponibilità: Unix. Nuovo nella versione 2.2.

getfilesystemencoding( )
Restituisce il nome della codifica usata per convertire i nomi Unicode dei file nei nomi file di sistema, o None se viene usata la codifica predefinita di sistema. Il valore del risultato dipende dal sistema operativo: Nuovo nella versione 2.3.

getrefcount( oggetto)
Restituisce il conteggio dei riferimenti dell'oggetto. Il conteggio risultante è generalmente più alto di quello che potreste aspettarvi, perché include il riferimento (temporaneo) ad un argomento di getrefcount().

getrecursionlimit( )
Restituisce il valore attuale del limite di ricorsione, ovvero la profondità massima dello stack dell'interprete Python. Tale limite previene che una ricorsione infinita provochi uno stack overflow di C, e un crash di Python. Questo parametro può essere impostato con setrecursionlimit().

_getframe( [profondità])
Restituisce un oggetto di tipo frame dallo stack delle chiamate. Se viene specificato il parametro facoltativo intero della variabile profondità, restituisce il frame che sta al di sotto della cima dello stack del numero di chiamate indicato. Se il valore è più grande della profondità dell'intero stack, allora viene sollevata l'eccezione ValueError. Il valore predefinito per la variabile profondità è zero e in questo caso viene restituito il frame in cima allo stack.

Questa funzione dovrebbe essere utilizzata solamente per scopi speciali o interni (all'interprete).

getwindowsversion( )
Restituisce una tupla che contiene cinque componenti, che descrivono la versione di Windows attualmente in esecuzione. Gli elementi sono major, minor, build, platform e text. text contiene una stringa mentre tutti gli altri valori sono interi.

platform può assumere uno dei seguenti valori:

0 (VER_PLATFORM_WIN32s)
Win32s o Windows 3.1.
1 (VER_PLATFORM_WIN32_WINDOWS)
Windows 95/98/ME
2 (VER_PLATFORM_WIN32_NT)
Windows NT/2000/XP
3 (VER_PLATFORM_WIN32_CE)
Windows CE.

Questa funzione incapsula la funzione Win32 GetVersionEx(); consultate la documentazione Microsoft per ulteriori informazioni su questi valori.

Disponibilità: Windows. Nuovo nella versione 2.3.

hexversion
Il il numero di versione codificato come un singolo intero. Viene garantito che aumenti ad ogni versione, comprendendo un adeguato supporto per versioni che non siano di produzione. Per esempio, per verificare che l'interprete Python sia almeno alla versione 1.5.2 utilizzate:

if sys.hexversion >= 0x010502F0:
    # uso di qualche funzionalità avanzata
    ...
else:
    #  usa un'implementazione alternativa o l'invio di un 
    #+ avvertimento all'utente 
    ...

Questa viene chiamata "hexversion" (letteralmente: "versione esadecimale") poiché assomiglia a qualcosa di comprensibile solo quando viene vista attraverso la funzione built-in hex(). Per una codifica più leggibile potete utilizzare il valore di version_info. Nuovo nella versione 1.5.2.

last_type
last_value
last_traceback
Queste tre variabili non vengono sempre definite; vengono impostate quando un'eccezione non viene gestita e l'interprete stampa un messaggio d'errore e una traceback dello stack. L'utilizzo per cui sono state introdotte consiste nel permettere l'importazione di un modulo debugger durante l'utilizzo interattivo, ed iniziare un debugging successivo al crash senza dover rieseguire il comando che ha causato l'errore. L'utilizzo tipico è "import pdb; pdb.pm()" per far partire il debugger; per ulteriori informazioni vedete il capitolo 9, ``Il debugger di Python''.

Il significato delle variabili è lo stesso di quello dei valori restituiti da exc_info(), vista precedentemente. Poiché esiste un solo thread interattivo, la thread-safety non è un problema per queste variabili, a differenza di quanto accade per exc_type exc_type etc..

maxint
Il più grande numero intero positivo supportato dal tipo intero standard di Python. Questo valore è almeno 2**31-1. Il più grande numero intero negativo è -maxint-1 -- l'asimmetria è frutto dell'aritmetica binaria in complemento a 2.

maxunicode
Un intero che rappresenta il più grande code point per un carattere Unicode. Questo valore dipende dall'opzione di configurazione che specifica se i caratteri Unicode vengono memorizzati come UCS-2 o UCS-4.

modules
Questo è un dizionario che mappa i nomi dei moduli nei moduli che sono già stati caricati. Il dizionario può venire manipolato per forzare il ricaricamento degli stessi moduli o per altri trucchi del genere. Ricordate che eliminare un modulo da questo dizionario non è la stessa cosa che invocare il metodo reload() sul corrispondente oggetto di tipo modulo.

path
Una lista di stringhe che specificano i percorsi di ricerca per trovare i moduli richiesti. Vengono inizializzate dalla variable d'ambiente PYTHONPATH, oltre che predefinite in funzione dell'installazione effettuata.

Inizializzata all'avvio del programma, il primo elemento di questa lista, path[0], è la directory contenente lo script utilizzato per invocare l'interprete Python. Se la directory dello script non è disponibile (p.es. se l'interprete viene invocato interattivamente, o se lo script viene letto direttamente dallo standard input), path[0] è una stringa vuota, che indica a Python di cercare i moduli prima nella directory corrente. Attenzione che la directory dello script viene inserita prima delle altre voci risultanti in PYTHONPATH.

Un programma è libero di modificare questa lista per i propri scopi.

Modificato nella versione 2.3: le stringhe Unicode non vengono più ignorate.

platform
Questa stringa contiene l'identificatore del tipo di piattaforma, p.es. 'sunos5' o 'linux1'. Può venire utilizzata per aggiungere componenti specifici del sistema a path, per istanza.

prefix
Una stringa contenente la directory specifica nel sistema dove vengono installati i file di Python indipendenti dalla piattaforma; normalmente, questa stringa contiene '/usr/local'. Può venire impostata in fase di compilazione con l'opzione --prefix nello script di configure. La principale collezione dei moduli di libreria di Python viene installata nella directory prefix + '/lib/pythonversion', mentre gli header file indipendenti dal sistema (tutti, eccetto pyconfig.h) vengono collocati in prefix + '/include/pythonversion', dove version è uguale a version[:3].

ps1
ps2
Stringhe che specificano il prompt principale e quello secondario dell'interprete. Vengono definite solo se l'interprete è nel modo interattivo. Il loro valore iniziale, in questo caso, è '>>> ' e '... '. Se un oggetto non stringa viene assegnato ad entrambe le variabili, la funzione str() viene valutata ogni volta che l'interprete si prepara a leggere un nuovo comando interattivo; queste stringhe possono venire usate per implementare un prompt dinamico.

setcheckinterval( intervallo)
Imposta il ``check interval`` dell'interprete. Questo valore intero determina quanto spesso l'interprete deve controllare delle cose che sono soggette ad un comportamento periodico, come l'attivazione dei thread e la gestione dei segnali. Abitualmente è 100, il che significa che il controllo viene fatto ogni 100 istruzioni Python virtuali. Impostandolo a un valore maggiore è possibile incrementare le prestazioni per i programmi che fanno uso di thread. Impostandolo a un valore <= 0, il controllo viene effettuato ad ogni istruzione virtuale, massimizzando la responsività a scapito di un maggiore carico di lavoro.

setdefaultencoding( nome)
Imposta il valore corrente di codifica usata dall'implementazione Unicode. Se nome non corrisponde a nessuna tra le codifiche disponibili, viene sollevata l'eccezione LookupError. Questa funzione è designata per venire usata soltanto dall'implementazione del modulo site, e dove necessario, da sitecustomize. Una volta usata dal modulo site, viene rimossa dallo spazio dei nomi del modulo sys. Nuovo nella versione 2.0.

setdlopenflags( n)
Imposta le opzioni usate dall'interprete per le chiamate dlopen(), come quando l'interprete carica dei modulo di estensione. Tra i vari compiti, abilita un metodo (lento) di risoluzione dei simboli nel momento in cui un modulo viene importato, se chiamato come sys.setdlopenflags(0). Per condividere i simboli attraverso i moduli di estensione, si deve chiamare sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL). I nomi simbolici per le opzioni del modulo possono essere trovate sia nel modulo dl che nel modulo DLFCN. Se DLFCN non è disponibile, può essere generato da /usr/include/dlfcn.h usando lo script h2py. Disponibilità: Unix. Nuovo nella versione 2.2.

setprofile( profilefunc)
Imposta la funzione del profile di sistema , che permette di implementare un profiler per il codice sorgente Python direttamente in Python stesso. Vedete nel capitolo 10 per maggiori informazioni circa il profiler di Python. La funzione di profile di sistema viene invocata allo stesso modo della funzione di sistema trace (verificate settrace()), ma non viene chiamata per ogni riga eseguita del codice (soltanto sulle chiamate e sui valori restituiti, ma un evento di restituzione viene riportato solo quando un'eccezione viene precedentemente impostata). La funzione è specifica per i thread, ma non c'è modo per il profiler di conoscere i segnali che contestualmente vengono scambiati tra i thread, e così non ha senso usarla quando sono presenti thread multipli. Inoltre, il risultato del suo valore non viene utilizzato, cosicché può restituire semplicemente None.

setrecursionlimit( limite)
Imposta la massima profondità dello stack utilizzato dall'interprete Python a limite. Questo limite previene ricorsioni infinite, cause di overflow dello stack C e crash di Python.

Il massimo limite possibile dipende dalla piattaforma in uso. Un utente può aver bisogno di impostare un limite più alto quando ha un programma che richieda una ricorsione profonda, e una piattaforma che supporti un limite più alto. Questo dovrebbe essere fatto con cura, perché un limite troppo alto può causare un crash.

settrace( tracefunc)
Imposta la funzione trace di sistema, che consente di implementare in Python un debugger di codice sorgente Python. Vedete la sezione 9.2, ``Come funziona'' nel capitolo sul debugger Python. La funzione è specifica per i thread; per fare in modo che il debbuger supporti il multi-threads, deve essere registrata tramite settrace(), per ciascun thread che viene esaminato dal debugger.

stdin
stdout
stderr
File oggetto corrispondenti a standard input, standard output e standard error dell'interprete. stdin viene usato per tutti gli input dell'interprete, ad eccezione degli script che non includono le chiamate input() e raw_input(). stdout viene usato per l'output di print, per le istruzioni, e per gli inviti di input() e raw_input(). L'invito dell' interprete ed i suoi messaggi di errore (la maggior parte di essi) vengono inviati allo stderr. stdout e stderr non hanno bisogno di essere dei file oggetto built-in: ogni oggetto è accettabile finché possiede un metodo write() che prenda una stringa argomento. (Il cambiamento di questi oggetti non influisce sui flussi I/O standard, per processi eseguiti da os.popen(), os.system(), o della famiglia di funzioni di exec*() nel modulo os.)

__stdin__
__stdout__
__stderr__
Questi oggetti contengono i valori originali di stdin, stderr e stdout all'inizio del programma. Vengono usati durante la finalizzazione e potrebbero essere utili per ripristinare gli attuali file che sappiamo essere file oggetto funzionanti, nel caso in cui siano stati sovrascritti con un oggetto corrotto.

tracebacklimit
Quando questa variabile viene impostata ad un valore intero, determina il numero massimo dei livelli della informazione di traceback stampata quando si verifica un'eccezione non gestibile. Il valore predefinito è 1000. Quando viene impostata a 0 o inferiore, tutta l'informazione della traceback viene soppressa e viene stampata soltanto il tipo di eccezione ed il valore.

version
Una stringa contenente la versione dell'interprete Python, insieme alle informazioni supplementari del numero di compilazione e del compilatore utilizzato. Ha un valore nel formato 'version (#build_number, build_date, build_time) [compiler]'. I primi tre caratteri vengono usati per identificare la versione nelle directory d'installazione (dove appropriato su ciascuna piattaforma). Un esempio:

>>> import sys
>>> sys.version
'1.5.2 (#0 Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)]'

api_version
La versione dell'API C per questo interprete. I programmatori possono trovarlia utile quando la versione del debbuging entra in conflitto tra Python ed i moduli di estensione. Nuovo nella versione 2.3.

version_info
Una tupla contenente i cinque componenti del numero della versione: major, minor, micro, releaselevel e serial. Tutti i valori eccetto releaselevel sono interi; il livello della release viene identificato come 'alpha', 'beta', 'candidate' o 'final'. Il version_info corrispondente alla versione Python 2.0 è: (2, 0, 0, 'final', 0). Nuovo nella versione 2.0.

warnoptions
Questo è il dettaglio dell'implementazione dell'ambiente degli avvertimenti; non modificate questo valore. Fate riferimento al modulo warnings per avere più informazioni sull'ambiente degli avvertimenti.

winver
Il numero di versione usato per formare le chiavi di registro su piattaforme Windows. Viene immagazzinata come stringa di risorsa 1000 nella DLL di Python. Il valore viene normalmente costituito dai primi tre caratteri di version. Viene fornito nel modulo sys per scopi informativi; la modifica di questo valore non effetti sulle chiavi di registro usate da Python. Disponibilità: Windows.

Vedete anche:

Modulo site:
Questo descrive come usare i files .pth per estendere sys.path.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.