我正在编写一个脚本来读取系统日志,并且在守护它时遇到了问题。它随意挂起,我不能为我的生活找出原因。这是代码:
daemon_context = daemon.DaemonContext(files_preserve=[fh.stream])
with daemon_context:
logger.debug("In Daemon")
main()
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
我正在记录所有内容,因为我要找出错误被捕获的位置。
当我使用python3 test.py --filename access.log
运行时,我得到:
First
In Daemon
Main Loop
Namespace(filename='access.log')
In Else
那是整个日志。它就此停止。
但如果我运行python3 test.py
,没有文件名参数,那么我得到这个日志:
First
In Daemon
Main Loop
Namespace(filename=None)
In If
[]
[]
After Ifs
<sqlalchemy.engine.base.Connection object at 0x7fe11c1da5f8>
然后它无限重复,直到我停止任务。
我无法弄清楚为什么它会停止。如果有人可以帮助我,那就太好了。在尝试使用python-daemon
之前,我有一个不同形式的此脚本。所以我知道底层逻辑应该是合理的。
答案 0 :(得分:0)
此
daemon_context = daemon.DaemonContext(files_preserve=[fh.stream])
with daemon_context:
与
不同with daemon.DaemonContext(files_preserve=[fh.stream]) as daemon_context:
我也不确定你的记录器,即全局变量,在守护进程中是否能够在主进程死亡后继续存在。您是否尝试在main()
内初始化它?