6.21 tempfile -- Generare file e directory temporanei

Questo modulo genera file e directory temporanei. Funziona su tutte le piattaforme supportate.

Nella versione 2.3 di Python, questo modulo � stato revisionato per accrescerne la sicurezza. Adesso fornisce tre nuove funzioni NamedTemporaryFile(), mkstemp() e mkdtemp() che dovrebbero eliminare tutti i casi in cui si debba usare la funzione insicura mktemp(). I nomi dei file temporanei creati da questo modulo non contengono pi� l'ID del processo; viene invece usata una stringa di sei caratteri casuali.

Inoltre, tutte le funzioni chiamabili dall'utente ora prendono argomenti aggiuntivi, consentendo il controllo diretto sulla posizione e sul nome dei file temporanei. Non � pi� necessario usare le variabili globali tempdir e template. Per mantenere la compatibilit� all'indietro, l'ordine degli argomenti risulta piuttosto bizzarro; viene raccomandato, per chiarezza, di usare gli argomenti a parola chiave, keyword.

Il modulo definisce le seguenti funzioni chiamabili dall'utente:

TemporaryFile( [mode='w+b'[, bufsize=-1[, suffix[, prefix[, dir]]]]])
Restituisce un oggetto file (o simile a file) che pu� venire usato come area temporanea di memorizzazione. Il file viene creato usando mkstemp. Verr� distrutto non appena chiuso (includendo in questo una implicita chiusura quando l'oggetto viene raccolto dal garbage collector). Sotto Unix, il parametro directory per il file viene rimosso non appena il file viene creato. Altre piattaforme non supportano questo comportamento; il vostro codice non dovrebbe fare affidamento su di un file temporaneo creato usando questa funzione, abbia o meno un nome visibile nel filesystem.

Il parametro mode viene impostato in modo predefinito a 'w+b', in modo tale che il file creato possa venire letto e scritto senza essere chiuso. Viene usata la modalit� binaria, in modo tale che si comporti coerentemente su tutte le piattaforme, indipendentemente dal tipo dei dati immagazzinati. La variabile bufsize viene impostata al valore predefinito -1, a significare che viene usato il sistema operativo predefinito.

I parametri dir, prefix e suffix vengono passati a mkstemp().

NamedTemporaryFile( [mode='w+b'[, bufsize=-1[, suffix[, prefix[, dir]]]]])
Questa funzione opera esattamente come la funzione TemporaryFile(), eccetto che al file viene garantito di avere un nome visibile nel filesystem (su Unix, il parametro directory non � scollegato). Questo nome pu� venire ritrovato dal name del membro del file oggetto. Che il nome possa venire usato per aprire il file una seconda volta, mentre il file temporaneo nominato resta ancora aperto, � un comportamento variabile a con la piattaforma (valido cos� su Unix; viceversa non valido su Windows NT o successivi). Nuovo nella versione 2.3.

mkstemp( [suffix[, prefix[, dir[, text]]]])
Crea un file temporaneo nel modo pi� sicuro possibile. Non ci saranno preferenze di ``razza'' nella creazione del file, assumendo che la piattaforma sottostante implementi in modo appropriato l'opzione O_EXCL per os.open(). Il file sar� leggibile e scrivibile solamente dall'utente che possiede l'ID associato alla creazione del file stesso. Se la piattaforma usa i bit dei permessi per indicare l'eseguibilit� del file, il file non risulter� eseguibile da nessun altro utente. Il descrittore del file non viene ereditato dal processo derivato.

Diversamente da TemporaryFile(), l'utente di mkstemp() � responsabile della cancellazione del file temporaneo, quando realizzato con questa funzione.

Se il suffisso suffix viene specificato, il nome del file terminer� con quel suffisso, altrimenti non avr� suffisso. mkstemp() non inserisce un punto tra il nome del file ed il suffisso; se ne avete bisogno, mettetelo all'inizio del suffisso suffix.

Se il prefisso prefix viene specificato, il nome del file inizier� con quel prefisso; altrimenti verr� utilizzato un prefisso predefinito.

Se dir viene specificata, il file verr� creato in quella directory; altrimenti verr� usata una directory predefinita.

Se text viene specificato, questo indicher� se il file debba venire aperto in modalit� binaria (predefinita) o testuale. Su qualche piattaforma, questo non fa differenza.

mkstemp() restituisce una tupla contenente un descrittore di file aperto (come dovrebbe venire restituito da os.open()) e il percorso assoluto di quel file, in questo ordine. Nuovo nella versione 2.3.

mkdtemp( [suffix[, prefix[, dir]]])
Crea un directory temporanea nella maniera pi� sicura possibile. Non ci saranno preferenze di ``razza'' nella creazione della directory. La directory sar� leggibile, scrivibile, e attraversabile solamente dall'utente con che possiede l'ID associato alla creazione della directory stessa.

L'utente di mkdtemp() � responsabile della cancellazione della directory temporanea e del suo contenuto, quando realizzata con questa funzione.

Gli argomenti prefix, suffix e dir sono gli stessi della funzione mkstemp().

mkdtemp() restituisce il percorso assoluto della nuova directory. Nuovo nella versione 2.3.

mktemp( [suffix[, prefix[, dir]]])
Deprecato dalla versione 2.3 di Python. Usate invece mkstemp().
Restituisce un percorso assoluto di un file che non esiste al momento della chiamata. Gli argomenti prefix, suffix e dir sono gli stessi della funzione mkstemp().

L'uso di questa funzione pu� introdurre un buco di sicurezza nel vostro programma. Nel tempo che voi impiegate per fare qualcosa con il nome del file restituito, qualcun altro potrebbe avervi gi� abilmente raggirato.

Il modulo usa due variabili globali che dicono ad esso come costruire un nome temporaneo. Queste vengono inizializzate alla prima chiamata di una delle funzioni sottostanti. Il chiamante le pu� modificare, ma questo � sconsigliato; usate invece gli appropriati argomenti della funzione.

tempdir
Quando impostata ad un valore diverso da None, questa variabile definisce il valore predefinito dell'argomento dir per tutte le funzioni definite in questo modulo.

Se tempdir non � impostato o � None per nessuna chiamata e a nessuna delle funzioni precedenti, Python cerca una lista standard di directory ed imposta tempdir alla prima directory nella quale l'utente che effettua la chiamata abbia il permesso di creare dei file. La lista �:

  1. La directory indicata dalla variabile d'ambiente TMPDIR.
  2. La directory indicata dalla variabile d'ambiente TEMP.
  3. La directory indicata dalla variabile d'ambiente TMP.
  4. Una posizione specifica, dipendente dalla piattaforma:
    • Su Macintosh, la cartella Temporary Items.
    • Su RiscOS, la directory ndicata dalla variabile d'ambiente Wimp$ScrapDir.
    • Su Windows, le directory C:$\backslash$TEMP, C:$\backslash$TMP, $\backslash$TEMP e $\backslash$TMP, in questo ordine.
    • Su tutte le altre piattaforme, le directory /tmp, /var/tmp, e /usr/tmp, in questo ordine.
  5. Come ultima risorsa, la directory di lavoro corrente.

gettempdir( )
Restituisce la directory correntemente selezionata per crearvi un file temporaneo. Se tempdir non � None, allora semplicemente restituisce il suo contenuto; altrimenti, la ricerca decritta pi� avanti viene svolta e restituito il risultato.

template
Deprecato dalla versione 2.0 di Python. Usate invece gettempprefix().
Quando impostata ad un valore diverso da None, questa variabile definisce il prefisso del componente finale del nome del file restituito da mktemp(). Una stringa di sei lettere e numeri casuali viene aggiunta al prefisso, per rendere univoco il nome del file. Su Windows, il prefisso predefinito � ~T; su tutti gli altri sistemi � tmp.

Le versioni pi� vecchie di questo modulo usualmente richiedono che questo template sia impostato a None dopo una chiamata os.fork(); questo non � pi� necessario dalla versione 1.5.2.

gettempprefix( )
Restituisce il prefisso del nome del file usato per creare file temporanei. Questo non contiene componenti della directory. Usare questa funzione � preferibile, piuttosto che leggere direttamente la variabile da template. Nuovo nella versione 1.5.2.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.