Python: Erstellen Sie eine leere Datei Objekt
Ich bin versucht zu machen, ein logging-Modul für Python, das funktioniert nicht, denn es scheitert an der Erstellung des file-Objekts.
debug.py:
import os
import datetime
import globals
global fil
fil = None
def init(fname):
fil = open(fname, 'w+')
fil.write("# PyIDE Log for" + str(datetime.datetime.now()))
def log(strn):
currentTime = datetime.datetime.now()
fil.write(str(currentTime) + ' ' + str(os.getpid()) + ' ' + strn)
print str(currentTime) + ' ' + str(os.getpid()) + ' ' + strn
def halt():
fil.close()
fil wird nicht funktionieren, wie None
wie bekomme ich eine AttributeError
. Ich habe auch versucht, erstellen Sie ein dummy-Objekt:
fil = open("dummy.tmp","w+")
aber die dummy.tmp
- Datei geschrieben, stattdessen, obwohl init()
aufgerufen wird, bevor log()
ist. Natürlich kann nicht öffnen Sie eine neue Datei über eine bereits geöffnete Datei. Ich habe versucht, in der Nähe fil
vor init()
, aber Python sagte, es könnte nicht führen write()
auf eine geschlossene Datei.
Dies ist der code, der Zugriff auf debug.py
if os.path.exists(temp):
os.rename(temp, os.path.join("logs","archived","log-" + str(os.path.getctime(temp)) + ".txt"))
debug.init(globals.logPath)
debug.log("Logger initialized!")
Ich würde gerne die Protokollierung in meinem Programm und ich kann nicht finden, eine Abhilfe für dieses.
import logging
?aus Neugier, warum arent Sie encompassign dies in einer Klasse? Im ziemlich sicher, Sie würden dieses Problem vermeiden, wenn Sie Tat dies in einer Klasse
das wird nicht funktionieren, weil ich eine log-Archivierungs-system einrichten. Sehen Sie die letzten code-snippet. Die Datei zugreift Konflikt. Wenn ich öffnen Sie die Datei mit
debug.py
vor init()
dann werde ich nicht in der Lage, wite, da es bereits durch einen Prozess verwendet.es ist auch möglich, hes nur versuchen zu lernen, wie etwas zu tun auf seinem eigenen? es ist immer gut, die Praxis zu implementieren, etwas, das bereits vorhanden ist auf Ihrem eigenen.
Es ist immer eine gute Praxis zu lernen, einige grundlegende Module, die in fast jedem einzelnen Projekt.
InformationsquelleAutor Galen Nare | 2015-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass Sie nicht zuordnen, um die Globale
fil
:Dieser erstellt eine neue lokale variable mit dem Namen
fil
.Wenn Sie möchten, weisen Sie der globalen variable
fil
Sie brauchen, um es in den lokalen Geltungsbereich:global
konnten nur verwendet werden außerhalb von Funktionen. Ich lernte, falsch.Und nun lernen zu vergessen
global
an alle und versuchen, nicht zu verwenden es immer wieder.InformationsquelleAutor Peter Wood
Wenn Sie wollen, um Ihren eigenen logging-Modul, dann möchten Sie vielleicht zu drehen, was Sie bereits haben, in eine Klasse, so können Sie importieren Sie es als ein Modul.
Wenn Sie dies nicht als eine Klasse, würden Sie nicht haben, um zu verfolgen globals in den ersten Platz (im Allgemeinen verstanden als schlechte Praxis in der Welt der Programmierung: Warum sind Globale Variablen böse? )
Da ist es jetzt ein Modul auf seine eigene, wenn Sie möchten verwenden es in einem anderen python-Programm, das Sie tun würden:
und dann verwenden Sie Sie wo immer Sie wollen, zum Beispiel:
- und jedes-mal, wenn Sie einfügen möchten logs in:
und wenn Sie endlich fertig:
InformationsquelleAutor TehTris
Wenn Sie nicht wollen, zu beginnen mit einer leeren Datei, die Sie verwenden könnten, StringIO zu halten, werden die Nachrichten im Speicher und schreibt Sie auf die Festplatte am Ende aber seien Sie vorsichtig, wenn etwas passiert, und Sie wusste nicht, schrieb die Nachrichten, die Sie verloren.
InformationsquelleAutor Facundo Casco