Ich habe eine Datei, in die in einem Python 3.5-Hintergrundprozess geschrieben wird. Die Datei wurde in diesem Prozess geöffnet (was im Grunde ein laufendes Python-Skript ist), aber ich habe vergessen, eine close-Anweisung für die Datei einzufügen, um den Puffer gelegentlich in diesem Skript zu löschen. Das Skript ist unendlich, es sei denn, es wird manuell beendet und ich (jetzt) weiß, dass das Löschen des Python-Prozesses dazu führt, dass alle Daten im Puffer verloren gehen. Gibt es trotzdem eine Wiederherstellung der Daten, die in diesem bereits laufenden Prozess geschrieben werden sollen?Wie speichere ich den Datei-Schreibpuffer im laufenden Python-Prozess ohne file.close() - Anweisung?
Wie speichere ich den Datei-Schreibpuffer im laufenden Python-Prozess ohne file.close() - Anweisung?
Antwort
1)
pgrep python
2) Liste Filedeskriptoren
ls -l /proc/{PID}/fd
3) Öffnen Sie gdb die PID Ihrer Python-Prozess Get
$ gdb
(gdb) attach {PID}
(gdb) call fflush({FILE_DESCRIPTOR})
(gdb) detach
4) Überprüfen Sie Ihre Datei
erste
f.flush()
tun, und dann tunos.fsync(f.fileno())
, dass alle internen Puffer mit f verbunden sind, um sicherzustellen, auf die Festplatte geschrieben werden. Hier
ist ein Beispiel,
import os
with open("filename", "w") as f:
while True: # infinite program
f.write("the text")
f.flush()
os.fsync(f.fileno())
Sorry, ich war nicht klar genug. Der Prozess läuft bereits und ich möchte ihn von diesem laufenden Prozess wiederherstellen. – Omnomnious
Ah. Das ist dann schwieriger. Wahrscheinlich wirst du gdb benutzen müssen ... Ich denke, ich werde das hier als Erinnerung hinterlassen - du wirst es nicht vergessen, das zu tun, nachdem du dein Programm beendet hast: P – Shadow
- 1. Wie speichere ich den Text, den ich im Tag schreibe?
- 2. Wie speichere ich den Fremdschlüssel?
- 3. Wie ändere ich Iterator im laufenden Betrieb ohne veränderbare Variablen?
- 4. JHipster Wie speichere ich Dateien im Dateisystem?
- 5. Wie speichere ich Klassenvariablen im Speicher?
- 6. Wie speichere ich den Status mit CALayers?
- 7. file.close() Ausnahmebehandlung innerhalb einer With-Anweisung in Python
- 8. Wie speichere ich den benutzerdefinierten Spinner-Status
- 9. Wie kann ich den letzten laufenden Prozess
- 10. Wie speichere ich eine Datei in Pandas mit if-Anweisung?
- 11. Wie speichere ich einen gepufferten log4j FileAppender ohne Herunterfahren?
- 12. Wie speichere ich Bestellungen?
- 13. Kann ich SparkContext.appName im laufenden Betrieb ändern?
- 14. Wie speichere ich den Parameterwert zwischen den Funktionsaufrufen?
- 15. Wie speichere ich ein UIImage im Bundle der Anwendung?
- 16. Wie speichere ich einen Bericht direkt in .doc?
- 17. Wie speichere ich Optionen?
- 18. Wie bekomme ich den Dateipfad des gerade laufenden Javascript-Codes
- 19. Verzögerung im laufenden Thread
- 20. Wie speichere ich eine Datei ohne Erweiterung in Linux?
- 21. Wie speichere ich CSS-Änderungen von Chrome ohne Arbeitsbereiche?
- 22. Wie speichere ich nur die Zeitzone ohne GMT?
- 23. WPF - Wie speichere ich ein PNG ohne Alphakanal?
- 24. Wie speichere ich ein Modell, ohne ein Signal zu senden?
- 25. Wie speichere ich Date Time ohne die Zeit?
- 26. Wie kann ich den aktuell angemeldeten Benutzer-Benutzernamen im Modellfeld speichern, während ich ein Formular speichere?
- 27. Wie speichere ich das Dataset im temporären Speicher der Seite?
- 28. DirectX9 Fenster ohne Gerät im laufenden Betrieb der Größe zurückgesetzt
- 29. Update MediaItemDisplayProperties im laufenden Betrieb
- 30. Wie speichere ich das Ergebnis einer Funktion im selben Objekt?
Ist der Dateideskriptor eine Zahl oder ein Name (mit Verzeichnis)? – Omnomnious
Der Dateideskriptor ist die Nummer. Die Standards FD sind: 0 für stdin, 1 für stdout, 2 für stderr. – lcastillov
Ich landete dabei: Programm empfangen Signal SIGSEGV, Segmentierung Fehler. 0x00007f487134d93d in fflush() von /lib64/libc.so.6 Das zu debuggende Programm wurde während einer von GDB aufgerufenen Funktion signalisiert. GDB bleibt in dem Rahmen, in dem das Signal empfangen wurde. Um dieses Verhalten zu ändern, verwenden Sie "set dewonesignal on". Die Auswertung des Ausdrucks mit der Funktion (fflush) wird abgebrochen. – Omnomnious