2

我在使用回调时为函数提供参数时遇到问题。我是 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 的文档,它变得模糊了。无论如何,我可以在该函数中使用 options.f_name 的任何可能方式。我一直在使用这样的东西来放入要使用的函数参数。

    first_name = options.f_name

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

4

4 回答 4

1

旧帖子,但为了后代:您需要指定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'}
于 2019-03-20T13:59:01.407 回答
0

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

附带说明一下,urllib 也很难使用。查看请求模块。http://docs.python-requests.org/en/latest/

于 2013-09-18T23:16:52.037 回答
0

如果您查看文档,您会发现您实际上需要使用:

parser.values.f_name

当然,您应该确保对尚未定义的情况采取预防措施。

于 2014-11-21T17:47:37.567 回答
0

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

顺便说一句:不推荐使用 optparse 以支持 argparse。

于 2013-09-18T23:38:16.723 回答