Domanda

Sto scrivendo uno script Python logger, che scrive in un file CSV nel seguente modo:

  1. Aprire il file
  2. Dati Append
  3. Chiudere il file (credo che questo sia necessario per salvare le modifiche, per essere sicuri di routine dopo ogni registrazione.)

PROBLEMA :
Il file è molto accessibile tramite Esplora risorse di Windows (sto usando XP). Se il file viene aperto in Excel, l'accesso ad essa è bloccato da Excel. Quando i tentativi di script per aggiungere dati, ovviamente non riesce, allora interrompe del tutto.

Obiettivo:
C'è un modo per bloccare un file utilizzando Python in modo che qualsiasi accesso ad esso rimane esclusiva allo script? O forse la mia metodologia è povero, in primo luogo?

È stato utile?

Soluzione

Invece di chiudere e riaprire il file dopo ogni accesso, basta svuotare il suo buffer:

theloggingfile.flush()

In questo modo, tenerlo aperto per la scrittura in Python, che dovrebbe bloccare il file da altri programmi di apertura per la scrittura. I che Excel saranno in grado di aprirlo come di sola lettura, mentre è aperto in Python, ma non posso controllare che senza riavviare Windows.

Modifica Non credo che è necessario il gradino sotto. .flush() dovrebbe inviare al sistema operativo, e se si tenta di vedere le cose in un altro programma, il sistema operativo dovrebbe dare la versione in cache. Utilizzare os.fsync per forzare il sistema operativo di scrivere davvero sul disco rigido, ad esempio, se siete preoccupati per la mancanza di tensione improvvisi.

os.fsync(theloggingfile.fileno())

Altri suggerimenti

Per quanto ne so, Windows non supporta il blocco dei file. In altre parole, le applicazioni che non conoscono il file viene bloccato non può essere impedito di lettura di un file.

Ma la domanda che rimane è: come può Excel raggiungere questo obiettivo

Si potrebbe desiderare di provare a scrivere in un file temporaneo prima (quella che Excel non conosce) e sostituire il file originale da esso lateron.

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