【问题标题】:How to make a custom command line interface using OptionParser?如何使用 OptionParser 制作自定义命令行界面?
【发布时间】:2009-11-11 16:52:08
【问题描述】:

我正在使用 optparse 模块中的 OptionParser 来解析我使用 raw_input() 获得的命令。

我有这些问题。

1.) 我使用 OptionParser 来解析这个输入,例如。 (获取多个参数)

my prompt> -a foo -b bar -c spam eggs 

我通过在 add_option() 中为 '-c' 设置 action='store_true' 来做到这一点,现在如果有另一个带有多个参数的选项说 -d x y z 那么如何知道哪些参数来自哪个选项?如果必须再次解析其中一个参数,例如

my prompt> -a foo -b bar -c spam '-f anotheroption'

2.) 如果我想做这样的事情..

my prompt> -a foo -b bar 
my prompt> -c spam eggs 
my prompt> -d x y z 

现在每个条目都不能影响上一个命令设置的其他选项。如何完成这些?

【问题讨论】:

    标签: python optparse


    【解决方案1】:

    对于第 2 部分:您需要为您处理的每一行创建一个新的 OptionParser 实例。并查看cmd module 编写这样的命令循环。

    【讨论】:

    • 哇! thanx ..我不知道python有一个用于这些东西的内置库..但文档中仍然没有提供示例。 :(
    • cmd 太棒了......现在我正在尝试将 OptionParser 插入到自定义命令行 UI 中的命令处理中......
    【解决方案2】:

    您还可以使用nargs 选项属性解决#1,如下所示:

    parser = OptionParser()
    parser.add_option("-c", "", nargs=2)
    parser.add_option("-d", "", nargs=3)
    

    【讨论】:

    • 它有点帮助,但我怎么能说什么参数是什么选项,因为所有参数最终都在同一个列表中
    • 知道了!性感!是的,现在我得到了一个参数的元组..这就是我想要的.. 'store_true' 不能与 nargs 选项一起使用...... :)
    【解决方案3】:

    optparse 通过要求参数始终具有相同数量的 parameters(即使该数量为 0)来解决 #1,不允许使用可变参数参数:

    通常,给定的选项要么采用 一个论点,或者它没有。很多 人们想要一个“可选的选项 论点”功能,这意味着一些 选项将接受一个参数,如果他们 看到它,如果他们没有,就不会。这 有点争议,因为它 使解析模棱两可:如果“-a”需要 一个可选参数和“-b”是 完全是另一种选择,我们如何 解释“-ab”?因为这 歧义,optparse 不支持 这个功能。

    您可以通过不重用 parse_args 的先前值来解决 #2,因此它将创建一个新的值对象而不是更新。

    【讨论】:

    • 当然,我也同意你不应该在 cmd 更合适的地方使用 optparse,但这就是 optparse 的工作原理!
    • 感谢 1s 问题的第二部分。我知道有一种方法可以处理多个参数选项,但是,我想知道如何使用多个参数管理多个选项。它可以通过使用“store_true”来完成。但是所有的参数仍然进入同一个参数列表,并且没有参考它属于哪个函数:(
    • 如果一个选项有参数,你需要为它指定参数,那么这些参数不会被保存在 'args' 中。
    • 是的,现在我得到了一个元组的参数..这就是我想要的.. 'store_true' 不能与 nargs 选项一起使用......
    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多