Python TimedRotatingFileHandler kann die Protokolldatei nicht umbenennen, da der Windows -Prozess nach Abschluss des CLIPython

Python-Programme
Anonymous
 Python TimedRotatingFileHandler kann die Protokolldatei nicht umbenennen, da der Windows -Prozess nach Abschluss des CLI

Post by Anonymous »

Ich habe eine Python -CLI mit Click Library. Ich verwende PyInstaller, um das endgültige EXE für Windows -Maschinen zu konfigurieren. Jeder Befehl in klicks greift den logger mit seinem namen und zeigt auf denselben Dateinamen namens app.log
Der Speicherort des Protokolls ist immer in %user %\ appdata \ local \ temp \ sony_folder \ logs \ app. Datei, Anmelden kein Problem. In diesem Fall muss es das Datum anhängen und eine neue Protokolldatei erstellen. Der korrekte Vorgang wäre also:
  • app.log Änderungsdatum
  • Letztes Datum ist ein Tag alt, Umbename app.log bis app.log. 3/4/2025)
  • Neue App.log Datei erstellen und startet dort die Protokollierung
Mein aktuelles Verständnis ist, dass klicken Sie auf cli oder PyInstaller sollten den CLI mit 1 Befehl in 1 -Prozess ausführen. Sie können den CLI -Befehl gleichzeitig nicht ausführen, es sei denn, Sie erstellen eine clevere programmatische Möglichkeit, dies zu tun. Aus der Benutzerperspektive ist dies nicht möglich.#Traceback here - last call is to os.rename(source,dest) in logging module handlers.py

PermissionError: [WinError32] The process cannot access the file because it is being used by another process"
'C:\\Users\SOME_USER\AppData\Local\Temp\SOME_FOLDER\logs\app.log' -> 'C:\\Users\SOME_USER\AppData\Local\Temp\SOME_FOLDER\logs\app.log.2025-03-03'
< /code>
Ich habe Probleme, zu verstehen, wo ich dies beheben muss oder wie man es untersucht. Es speichert alle seine Anforderungen in einem TEMP -Ordner und entfernt den Temp -Ordner nach Abschluss der Ausführung. Warum sollte dies nicht die verwendete Protokolldatei veröffentlichen? Ich würde denken, dass der Prozess sofort veröffentlicht wird.
logger = logging.getLogger(name)

logger.setLevel(logging.DEBUG)

path = pathlib.Path.home() / filename
file_handler = logging.handlers.TimedRotatingFileHandler(path, when="midnight", interval=1, backupCount=7)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(LOG_FORMATTER))
logger.addHandler(file_handler)

< /code>
Ich erstelle beispielsweise eine Protokolldatei in Dokumentenordner. Dann führe ich diesen Befehl aus, um das Änderungsdatum zu ändern, sodass sie so angezeigt wird, dass die Datei seit gestern nicht berührt wurde.import os
import time

file_path = "C:\\path\\to\\your\\file.txt"

# Set the modification time to a specific timestamp (e.g., Jan 1, 2024, at 12:00 PM)
new_mtime = time.mktime((2025, 3, 3, 12, 0, 0, 0, 0, 0))

# Update the modification time (keep access time unchanged)
os.utime(file_path, (os.stat(file_path).st_atime, new_mtime))

print("Modification time updated successfully!")

< /code>
Sobald die Datei so aktualisiert ist, dass sie gestern geschrieben wurde. Ich habe meinen Code mit dem Logger wiederholt und es wird die alte Datei erfolgreich umgebracht und ein neues Protokoll erstellt. Unnötig zu erwähnen, das ist nicht das, was in meiner CLI -Anwendung passiert

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post