【问题标题】:what is the best way to parse, cant use optparse [closed]什么是最好的解析方式,不能使用 optparse [关闭]
【发布时间】:2014-10-06 16:11:20
【问题描述】:

我有一个很长的脚本,其中有几个选项可供用户选择,我试图使用 optparse,但我读过 optparse 不接受一个选项中的多个输入。 我的意思是,如果我需要计算某个数字的平方,我想计算几个,而不仅仅是一个。我的意思是在命令行中编写 python math.py -i 4 5 6 54 和选项 -i 以在这些数字上执行并返回 16 25 36 2916,除此之外添加更多选项,例如 python math.py -i 4 5 6 54 -d 4 5 6 54 和选项 -d 也将在这些数字上执行。你能帮我知道什么是解析的最佳选择吗?

提前致谢

【问题讨论】:

  • 请在它们之间使用句子和句号(句号)。
  • 你有什么尝试吗?
  • 是的,我已经尝试了很多东西,实际上我有一个带有 optparse 选项的主函数,但它不起作用,即使我在每个选项上只写一个输入(如 python math. py -i 3 -d 3)

标签: python parsing optparse command-line-arguments


【解决方案1】:

您可以通读sys.argv(命令行参数的数组)并以您喜欢的方式解释它们。

【讨论】:

    【解决方案2】:

    请查看文档中的以下example

    它在 optparse 中使用 callback 选项类型。如果可以,您可能应该改用argparse,但这需要2.7+。

    文档中的示例代码:

     def vararg_callback(option, opt_str, value, parser):
         assert value is None
         value = []
    
         def floatable(str):
             try:
                 float(str)
                 return True
             except ValueError:
                 return False
    
         for arg in parser.rargs:
             # stop on --foo like options
             if arg[:2] == "--" and len(arg) > 2:
                 break
             # stop on -a, but not on -3 or -3.0
             if arg[:1] == "-" and len(arg) > 1 and not floatable(arg):
                 break
             value.append(arg)
    
         del parser.rargs[:len(value)]
         setattr(parser.values, option.dest, value)
    
    [...]
    parser.add_option("-c", "--callback", dest="vararg_attr",
                      action="callback", callback=vararg_callback)
    

    它有点毛茸茸,但它或多或少地做了你想要的,同时仍然允许你将 optparse 用于其他东西。

    【讨论】:

    • 我已经在文档中看到了该示例,但是,由于我是 python 新手,我不知道在 [...] 上写什么,我有一个 main 函数,其中包含解析器。 add_option (所有选项),所以,我必须在此之前写下 def vararg_callback(option, opt_str, value, parser):???
    • 我应该给函数的 4 个值是什么?
    • @marycrant:嗯,好的。如果您将到目前为止的代码发布到您的问题中,那将真的很有帮助。您可以将其粘贴到底部,然后选择它并点击{} 按钮。否则,我们只会互相交谈:)
    • 这是一个很长的代码,但我设法使用 action="append" 创建参数列表,我只需要一次又一次地调用函数(python math.py -我 10 -i 2 -i 3)
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 2011-10-09
    • 2011-06-29
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多