Wie kann man unter Windows eine Datei öffnen, die bereits von einem anderen Prozess zum Schreiben geöffnet wurde?

Ich versuche, eine Protokolldatei zu öffnen, die von einem anderen Prozess geöffnet bleibt, und die ersten Zeilen zu entfernen. Unter Unix würde ich einfach eineos.open('/tmp/file.log', os.O_NONBLOCK) und das würde mich meinem Ziel näher bringen.

Jetzt bin ich mit Windows fest und ich muss dieses Protokoll irgendwie drehen, ohne die Anwendung zu beenden, die die Datei enthält. Ist das überhaupt möglich?

Zuerst überlegte ich, ein Datei-Handle an der Stelle zu öffnen, an der die Anwendung das Protokoll erwartet hatte, und fungierte einfach als Pipe in ein Datei-Handle in Python, aber ich fand auch unter Windows keine Möglichkeit, dies zu tun.

Ich dachte auch nur daran, die Datei regelmäßig zu verschieben und die Anwendung die Datei neu erstellen zu lassen, aber da es istvon einem anderen Prozess verwendet werden das nützt nicht viel.

Gedacht anO_SHLOCK Das ist aber auch Unix und nicht Windows. Also habe ich die Datei auf mmap gelegt und hoffe, dass sie dadurch etwas flexibler wird, aber das hat mich nirgendwo hingeführt.

import mmap
import contextlib
import time

with open(r'test.log', 'r+') as f:
    with contextlib.closing(mmap.mmap(f.fileno(), 0)) as m:
        while 1:
            line = m.readline()
            if len(line) > 0:
                print line
            time.sleep(0.5)

Dies führt dazu, dass die Anwendung nicht auf die Datei zugreifen kann, da Python sie hält (und umgekehrt).

Kam zu denkensignal.SIGHUP Aber das gibt es auch in Windows nicht.

Ich stecke fest und habe alles ausprobiert. Kann mir Python hier weiterhelfen oder muss ich meine Sprache wechseln?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage