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.