3

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

ただし、nameStr0 を nameStr (つまり、変数名の正しいスペル) に置き換えると、コードはエラー メッセージなしで正常に実行されます。

  1. apscheduler.scheduler のロガーを作成するにはどうすればよいですか? スケジューラーの構成を扱うドキュメントのセクションに何か不足していますか?

  2. このロガーをある種の stderr と考えるのは正しいですか? もしそうなら、どこでそれを探しますか (それが私が設定した方法によって決定されない場合)

4

1 に答える 1

5

デフォルトのロガーを作成するだけで、すべてがそれに行くはずです:

import logging
logging.basicConfig()

定義されていない変数を使用する場合にのみ問題が発生する理由は、これにより、jobTester関数がエラーをスローし、apscheduler がキャッチしてエラー メッセージを で書き込もうとするためlogging.error()です。ロガーをセットアップしていないので、文句を言うでしょう。

python loggingを読むと、さまざまな設定方法があることがわかります。すべてをファイルに記録するか、標準出力に出力することができます。

于 2012-10-15T04:49:59.657 に答える