我正在尝试学习如何使用Python的apscheduler包,但是它会定期抛出以下错误:
No handlers could be found for logger "apscheduler.scheduler"
此消息似乎与计划作业中的错误相关联,例如,使用jobTester作为计划作业,以下代码(使用jobTester中的未定义变量(nameStr0))给出了上述错误消息:
from apscheduler.scheduler import Scheduler
from apscheduler.jobstores.shelve_store import ShelveJobStore
from datetime import datetime, timedelta
from schedJob import toyJob
def jobTester(nameStr):
outFileName = nameStr0 + '.txt'
outFile = open(outFileName,'w')
outFile.write(nameStr)
outFile.close()
def schedTester(jobList):
scheduler = Scheduler()
scheduler.add_jobstore(ShelveJobStore('example.db'),'shelve')
refTime = datetime.now()
for index, currJob in enumerate(jobList):
runTime = refTime + timedelta(seconds = 15)
jobName = currJob.name + '_' + str(index)
scheduler.add_date_job(jobTester, runTime, name = jobName,
jobstore = 'shelve', args = [jobName])
scheduler.start()
stopTime = datetime.now() + timedelta(seconds = 45)
print "Starting wait loop .....",
while stopTime > datetime.now():
pass
print "Done"
def doit():
names = ['Alan','Barbara','Charlie','Dana']
jobList = [toyJob(n) for n in names]
schedTester(jobList)
这可以通过运行此代码(存储在文件schedTester.py中)看到,如下所示:
>>> import schedTester
>>> schedTester.doit()
No handlers could be found for logger "apscheduler.scheduler"
Starting wait loop ..... Done
但是,当我用nameStr替换nameStr0时(即变量名的正确拼写),代码运行正常,没有错误消息。
如何为apscheduler.scheduler创建记录器?我是否遗漏了有关配置调度程序的文档部分
我认为这个记录器是某种stderr我是否正确?如果是的话,我会在哪里寻找它(如果不是由我设置的方式决定的话)
答案 0 :(得分:5)
你可以创建一个默认的记录器,一切都应该去:
import logging
logging.basicConfig()
当您使用尚未定义的变量时,您只有问题的原因是这会导致jobTester
函数抛出apscheduler正在捕获的错误并尝试编写错误消息与logging.error()
。由于您没有设置记录器,因此会抱怨。
如果您阅读python logging,您会发现有很多方法可以配置它。您可以将所有内容记录到文件中或将其打印到stdout。