2012-10-15 27 views
3

我想学习如何使用Python的apscheduler包,但周期性的,它引发以下错误:如何指定“记录仪”为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(即,正确拼写变量名称),代码运行良好,没有错误消息。

  1. 如何为apscheduler.scheduler创建记录器?我在配置调度程序的文档部分丢失了一些东西

  2. 我正确地认为这个记录器是某种类型的stderr吗?如果是这样,我在那里将寻找它(如果未通过的方式来确定我将它设置)

回答

5

您只需创建一个默认记录器,一切都应该去它:

import logging 
logging.basicConfig() 

当您使用尚未定义的变量时,只有问题的原因是,这会导致jobTester函数引发apscheduler正在捕获的错误,并尝试使用logging.error()写入错误消息。由于你没有设置记录器,它会发出抱怨。

如果您阅读了python logging,您会看到有很多种方式来配置它。您可以让它将所有内容都记录到文件或打印到标准输出。