2010-07-30 11 views
6

Mögliche Duplizieren:
check what files are open in PythonListet alle derzeit geöffneten Dateizugriffsnummern auf?

Hallo,

Ist es möglich, eine Liste aller aktuell geöffneten Datei-Handles zu erhalten, nehme ich an, dass sie irgendwo in der Umgebung gespeichert werden .

Ich interessiere mich für diese Funktion, da ich sicher alle Dateien behandeln möchte, die geöffnet sind, wenn ein schwerwiegender Fehler ausgelöst wird, d. H. Dateihandles schließen und möglicherweise beschädigte Dateien durch die ursprünglichen Dateien ersetzen.

Ich habe die Handhabung funktioniert, aber ohne zu wissen, welche Dateigriffe geöffnet sind, kann ich diese Idee nicht implementieren.

Nebenbei, wenn ein Datei-Handle initialisiert wird, kann dies von einer anderen importierten Methode geerbt werden?

Danke

+3

Duplizieren von http://stackoverflow.com/questions/2023608/check-what-files-are-open-in-python – robert

+0

welche o/s? Und es könnte helfen, das auch als Tag hinzuzufügen. – Mawg

Antwort

3

Der schöne Weg, dies zu tun wäre, um Ihren Code zu ändern, um zu verfolgen, wenn es eine Datei öffnet:

def log_open(*args, **kwargs): 
    print("Opening a file...") 
    print(*args, **kwargs) 
    return open(*args, **kwargs) 

Verwenden Sie dann log_open anstelle von open, um Dateien zu öffnen. Sie könnten sogar etwas Hackigeres tun, wie die Klasse File zu ändern, um sich selbst zu loggen. Dies ist in der oben stehenden verknüpften Frage abgedeckt.

Es ist wahrscheinlich eine ekelhaft, dreckige Hack die Garbage Collector einhergehen oder in __dict__ oder etwas suchen, aber Sie wollen nicht, das zu tun, es sei denn, Sie absolut wirklich wirklich ernst Muss.

5

lsof,/proc/pid/fd/

0

Wenn Sie Python verwenden 2.5+ können Sie das with Schlüsselwort verwenden (obwohl 2,5 Bedürfnisse `von Zukunft Import with_statement)

with open('filename.txt', 'r') as f: 
    #do stuff here 
    pass 
#here f has been closed and disposed properly - even with raised exceptions 

Ich weiß nicht, welche Art von katastrophalen Ausfall zu bork braucht die with Aussage, aber ich nehme an, dass es ein wirklich schlechter ist. Auf WinXP, meinem schnellen unwissenschaftlich Test:

import time 
with open('test.txt', 'w') as f: 
    f.write('testing\n') 
    while True: 
     time.sleep(1) 

und dann den Prozess mit Windows Task-Manager zu töten schrieb noch die Daten zu erheben.

Verwandte Themen