2017-05-22 1 views
-2

Ich habe mehrere Python-Skripte, die Text in derselben Datei schreiben müssen. Natürlich möchte ich garantieren, dass die Daten konsistent und nicht überlappend sind. Was ist der einfachste (und effizienteste) Weg das zu tun? Ich brauche keine plattformübergreifende Lösung.Python - Einfachste Lösung für mehrere Schreibzugriffe auf die gleiche Datei

Danke

+0

Wie schreiben sie in die Datei? Werden sie alle bis zum Ende anhängen, von Anfang an neu schreiben oder zufällig irgendwo dazwischen? Wenn ich nur anhänge denke ich nicht, dass es ein Problem geben würde – MrJLP

+0

Sie müssen letzten Char löschen, neuen Text anhängen und die Datei schließen. Wenn ich f.open (Pfad, "a +") und f.write ("Text") verwende. Meine Zweifel sind darüber, was passiert, wenn während Skript A auf Datei schreibt, Skript B dasselbe tut? Wenn es kein "Schließfach" gibt, könnte Text sich überschneiden, oder? –

+0

Sie könnten eine Dateisperre verwenden. – MrJLP

Antwort

1

Angenommen, Sie befinden sich auf einer * nix-Plattform, können Sie mit der fcntl eine Dateisperre erstellen. Es gibt auch die Plattform unabhängig filelock, aber ich habe das selbst nie benutzt.

Mit fcntl würden Sie die Datei sperren, sobald sie geöffnet wurde, dann schreiben, dann geben Sie die Sperre frei.

+0

Es scheint, was ich brauche. Jetzt versuche ich, mit f.open (path, 'a') fcntl.flock (f, LOCK.EX) f.write ("") fcntl.flock (f, LOCK.UN) f. close() Aber jetzt habe ich eine andere Frage ... Wenn ein Skript exklusiven Zugriff und ein anderes versucht, das gleiche zu erhalten, was passiert? Ich möchte es immer wieder in einer Art Prioritätswarteschlange versuchen ... aber ich denke auf diese Weise erhebe nur eine Ausnahme. –

+1

Sehen Sie sich die Dokumentation für den zugrunde liegenden flock() -Aufruf an. Wenn Sie LOCK_NB verwenden, wird der Aufruf nicht blockierend sein und eine Ausnahme in Python auslösen, andernfalls wird er blockiert. – MrJLP

+0

cool! Vielen Dank –

-1

In der open(*filename,mode*) Linie, verwenden Sie nur als Modus. Dadurch werden die Zeilen hinzugefügt, die Sie schreiben, anstatt die alten zu löschen.

+0

Ich benutze diese Methode, aber es stellt nicht sicher, dass Daten konsistent sein werden. –

Verwandte Themen