2010-12-21 4 views
0

Ich suche nach Code zu Überprüfen Sie, ob eine Datei im Dateisystem verfügbar ist (nicht von einem anderen Prozess verwendet). Wie könnte ich das in Python machen? Vielen Dank!Überprüfen, ob eine Datei in Python verfügbar ist (nicht von einem anderen Prozess verwendet)

Wie verwende ich es: Zyklisch prüfen, ob Datei verfügbar ist und wenn es (Prozesse nicht mehr benötigen) löschen Sie es.

+1

Werden Prozess A und Prozess B die Datei verwenden und sie währenddessen sperren, und Prozess C wird abfragen, um zu sehen, ob die Datei gelöscht werden kann, um zu wissen, dass sowohl A als auch B erledigt sind? Dies ist eine Race-Bedingung zu sein - sagen Prozess A beendet, gibt die Datei frei, dann C wird Timesliced ​​in, löscht die Datei, dann B wird Timesliced ​​in und geht, um die Datei zu verwenden und Boom geht. – mtrw

+0

@mtrw Es ist ein guter Punkt. In meinem Fall ist es jedoch nicht so kompliziert: Es gibt nur einen Prozess, der die Datei verwendet und nur einmal. – bluish

Antwort

2
while True: 
    try: 
     os.remove(yourfilename) # try to remove it directly 
    except OSError as e: 
     if e.errno == errno.ENOENT: # file doesn't exist 
      break 
     time.sleep(5) 
    else: 
     break 
+1

+1. Eine kränkliche Lösung für ein mieses Problem. Dies setzt natürlich voraus, dass die Datei * gesperrt/nicht löschbar ist. Wenn das Löschen der Datei bedeuten soll "der Prozess wurde mit der Datei gemacht", dann, hoppla! Dem würde ich nicht weiter vertrauen, als ich springen kann. –

0

Wenn die Datei anderer Prozess die Datei geöffnet und Sie löschen, wird es nicht aus dem Dateisystem entfernt werden, bis alle Prozesse, um es ihre Griffe schließen.

Wenn der andere Prozess lediglich seine Datei handle/object benötigt, um mit der Arbeit fortzufahren, können Sie die Datei sicher löschen, sie wird entfernt, wenn der Prozess den Punkt schließt. Wenn Sie open() für die Datei aufrufen möchten, bis der Prozess damit beendet ist, müssen beide Prozesse Sperren verwenden (siehe fcntl.flock()).

0

Nicht sicher, ob Sie auf Linux sind. Ich denke, was Sie suchen, ist die Implementierung von 'Fixierer' wie Funktionalität in Python.

Wenn Sie Linux verwenden, können Sie die Prozess-IDs im Dateisystem '/ proc' durchlaufen und die Dateien überprüfen, die von diesen Prozessen weitergeleitet werden. Überprüfen Sie dieses Skript fuser.py. Sie können den gleichen Ansatz verwenden und den oben aufgeführten Code an Ihre Bedürfnisse anpassen.

+0

Danke! Ich arbeite gerade an Windows (leider!), Aber ich hoffe, dass Ihre Antwort einigen Linux-Benutzern helfen wird. – bluish

Verwandte Themen