Ich schreibe ein Skript, um ein Systemprotokoll zu lesen, und ich habe Probleme beim Daemonieren. Es wird willkürlich aufgehängt und ich kann nicht für das Leben von mir herausfinden, warum. Hier ist der Code:Python-Daemon erwischt
Daemon
daemon_context = daemon.DaemonContext(files_preserve=[fh.stream])
with daemon_context:
logger.debug("In Daemon")
main()
Haupt
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("./debug.log")
logger.addHandler(fh)
logger.debug("First")
def main():
while True:
from schema import parsed, engine, session
logger.debug("Main Loop")
logger.debug(args)
if args.filename is None:
logger.debug("In If")
with open("/absolute/path/to/log.log") as f:
readlines = f.readlines()
logger.debug(readlines)
content = [x.split() for x in readlines]
logger.debug(content)
else:
logger.debug("In Else")
with open(args.filename) as f:
readlines = f.readlines()
logger.debug(readlines)
content = [x.split() for x in readlines]
logger.debug(content)
logger.debug("After Ifs")
conn = engine.connect()
logger.debug(conn)
rows = session.query(parsed).count()
for entry in range(rows, len(content)):
# Code inside this for loop is unimportant to the problem at hand
Logging
ich alles bin Anmeldung als ich gehen, um herauszufinden, wo der Fehler abgefangen wird.
Wenn ich es mit python3 test.py --filename access.log
laufen erhalte ich:
First
In Daemon
Main Loop
Namespace(filename='access.log')
In Else
, dass das gesamte Protokoll ist. Es hört einfach auf.
Aber wenn ich python3 test.py
laufen, ohne einen Dateinamen als Argument, dann bekomme ich dieses Protokoll:
First
In Daemon
Main Loop
Namespace(filename=None)
In If
[]
[]
After Ifs
<sqlalchemy.engine.base.Connection object at 0x7fe11c1da5f8>
Dann ist es unendlich wiederholt, bis ich die Aufgabe zu stoppen.
Ich kann einfach nicht herausfinden, warum es aufhört. Wenn mir jemand helfen könnte, wäre das großartig. Ich hatte eine andere Form dieses Skripts, bevor ich versuchte, python-daemon
zu verwenden, das funktionierte. Ich weiß also, dass die zugrunde liegende Logik vernünftig sein sollte.
Wie werden Ausnahmen in 'open (args.filename)' behandelt? – VPfB