2

私は Python 2.6 とその optparse モジュールで遊んでいます。引数の 1 つをコールバックを介して日時に変換したいのですが、失敗します。

コードは次のとおりです。

def parsedate(option, opt_str, value, parser):
    option.date = datetime.strptime(value, "%Y/%m/%d")

def parse_options(args):
    parser = OptionParser(usage="%prog -l LOGFOLDER [-e]", version="%prog 1.0")
    parser.add_option("-d", "--date", action="callback", callback="parsedate", dest="date")  
    global options
    (options, args) = parser.parse_args(args)
    print options.date.strftime()

if __name__ == "__main__":
        parse_options(sys.argv[1:])

エラーが発生します File: optparse.py in _check_callback "callback not callable"。私は自分のコールバックを定義する方法で何か間違ったことをしていると思いますが、何ですか? なぜ ?誰でも助けることができますか?

更新:コメントで述べたように、コマンドラインスクリプトのオプションに日時を含める最良の方法は、python docで提案されているように optparse を拡張することだと思います

次のクラスは、そのために実際にうまく機能します。

from copy import copy
from optparse import Option, OptionValueError
from datetime import datetime

def check_date(option, opt, value):
    try:
        return datetime.strptime(value, "%Y/%m/%d")
    except ValueError:
        raise OptionValueError(
            "option %s: invalid date value: %r. Should have a format like \"YYYY/MM/DD\"" % (opt, value))

class dateOption (Option):
    TYPES = Option.TYPES + ("date",)
    TYPE_CHECKER = copy(Option.TYPE_CHECKER)
    TYPE_CHECKER["date"] = check_date

とにかく、助けてくれてありがとう!

4

1 に答える 1

3

parsedate を引用符で囲みます。そうであってはなりません。

于 2010-04-12T08:27:03.010 に答える