Domanda

Ho scritto alcuni unittisti con Shelves a http://code.google.com/p/filecache/ e Python 2 salva esattamente il nome del file I specifico a Shelve.Open () ma in Python 3 ricevo 3 file diversi "BAK", "DAT" e "DIR".Quindi, prima che i test iniziano voglio cancellare questi file ma non so se ho alcuna garanzia sul loro nome file o estensione.

Come posso cancellare un riparo se so che è nome?

È stato utile?

Soluzione

Quali estensioni si ottengono dipende dal backend del database.È possibile che il valore predefinito differisca tra Python 2 e Python 3, ma può anche essere una differenza tra quali interfacce del database sono disponibili nel proprio ambiente.

Quindi no, non si ha una garanzia alle estensioni, a meno che non si utilizzi un'implementazione specifica, cioè BSDDDBSHELF o DBFILENAMELF.Probabilmente potresti specificare un file in una directory temporanea creata da Tempfile e quindi eliminare la Directory Directory.

Altri suggerimenti

Io uso Shelves perché TempFile e Dict [] Gli oggetti non possono persistere attraverso i moduli.Come hai scoperto, chiamare .clear () non cancella il contenuto dall'oggetto persistente su disco , lasciando un file R + W Popolato su disco dopo l'uscita.(Simile a una vulnerabilità di uso-after-free) è possibile eliminare lo Shelve al termine dell'uso:

import os
import shelve

shelve_name = 'shelve_name'
shelve_contents = shelve.open(shelve_name, flag='c', protocol=None, writeback=False)

shelve_file = (os.path.join(os.getcwd(), shelve_name))
os.remove(shelve_file)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top