2012-10-15 56 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,您會看到有很多種方式來配置它。您可以讓它將所有內容都記錄到文件或打印到標準輸出。