在使用回调时给函数提供参数时遇到问题。我是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
然后将为函数提供一个不起作用的参数。
答案 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)
答案 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'}