Python optparse模块中的回调问题

2 投票
1 回答
1455 浏览
提问于 2025-04-15 21:29

我正在玩Python 2.6和它的optparse模块。我想通过一个回调函数把我的一个参数转换成日期时间,但失败了。

这是我的代码:

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文档中建议的那样扩展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

无论如何,非常感谢大家的帮助!

1 个回答

3

你把解析日期的部分放在了引号里,其实不应该这样做。

撰写回答