Python optparse回调给函数提供参数

问题描述 投票:2回答:4

使用回调时,我在为函数提供参数时遇到问题。我是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

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

python callback optparse
4个回答
0
投票

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

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


0
投票

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

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


0
投票

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

parser.values.f_name

当然,你应该确保你采取预防措施hasn't been defined yet


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'}
© www.soinside.com 2019 - 2024. All rights reserved.