Python optparse回调给函数提供参数

时间:2013-09-18 23:08:51

标签: python callback optparse

在使用回调时给函数提供参数时遇到问题。我是python中命令行参数脚本的新手,所以对我来说很容易。这是我的代码:

    from optparse import OptionParser
    import urllib

    def google(option, opt_str, value, parser):
        print options.f_name

    parser = OptionParser()
    parser.add_option("-f", "--first", type="string", dest="f_name", help="Supply a first name to search", action="store")
    parser.add_option("-l", "--last", type="string", dest="l_name", help="Supply a last name to search", action="store")
    parser.add_option("-g", "--google", action="callback", callback=google)

    (options, args) = parser.parse_args()

似乎无法弄清楚为什么它不会打印出用户提供的输入。我在optparse上查看了python的doc,它只是模糊了。无论如何我可以在该函数中使用options.f_name。我一直在使用这样的东西放入要使用的函数参数中。

    first_name = options.f_name

然后将为函数提供一个不起作用的参数。

4 个答案:

答案 0 :(得分:0)

optparse很难使用。你应该尝试docopt。 http://docopt.org/

作为旁注,urllib也很难使用。查看请求模块。 http://docs.python-requests.org/en/latest/

答案 1 :(得分:0)

未指定参数的评估顺序,因此可以在optparse处理-g选项之前调用-f的回调。在解析期间执行此操作的唯一方法是使它们成为彼此了解的回调,并且仅在处理第二个参数时才执行您要查找的行为。 有没有任何理由你不能在parse_args()完成后设置一个标志并处理它,那么你将确保所有参数都已被处理。

BTW:不推荐使用optparse,而选择argparse。

答案 2 :(得分:0)

如果您查看documentation,则会发现您确实需要使用:

parser.values.f_name

当然,您应该确保对hasn't been defined yet的情况采取预防措施。

答案 3 :(得分:0)

旧帖子,但后代: 您需要指定参数type,以将optparse注入到value参数中:

def google(option, opt_str, value, parser):
    print value
parser.add_option("-g", "--google", action="callback", callback=google, type="string")

完整的示例显示如何将值返回到解析器以包含到options中:

from optparse import OptionParser

def doSomethingWithValue(value):
    return "baked beans and {}".format(value)

def google(option, opt_str, value, parser):
    setattr(parser.values, option.dest, doSomethingWithValue(value))

parser = OptionParser()
parser.add_option("-g", "--google", action="callback", callback=google, type="string", dest="googleOption")
(options, args) = parser.parse_args()
print(options)

# ./script.py          ==> {'googleOption': None}
# ./script.py -g spam  ==> {'googleOption': 'baked beans and spam'}