【问题标题】:docopt not allowing optional argumentsdocopt 不允许可选参数
【发布时间】:2014-02-21 00:50:15
【问题描述】:

我在docopt中有如下用法:

cli.py add_user <user_file> [<devices_file>] <destination_account> <token>
cli.py remove_user (--id|--username) <user_id> <source_account> <token>

[&lt;devices_file&gt;] 是一个可选参数。

但是,当我尝试这样使用它时,我得到了一个错误。

这没问题:

add_user user_29087.json dev_29087.json 531 token

这会引发错误:

add_user user_29087.json 531 token

错误:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensio
ns\Microsoft\Python Tools for Visual Studio\2.0\visualstudio_py_util.py", line 7
6, in exec_file
    exec(code_obj, global_variables)
  File "C:\Users\mryan\Documents\Code\cli\cli_front.py", line
 49, in <module>
    arguments = docopt(__doc__, version='1.0.0rc2')
  File "C:\Users\mryan\Documents\Code\cli\common\docopt.py", l
ine 581, in docopt
    raise DocoptExit()
DocoptExit: Usage:
    cli.py get_token
    cli.py add_user <user_file> [<devices_file>] <destination_account> <token>
    cli.py remove_user (--id|--username) <user_id> <source_account> <token>
    cli.py get_users <account_id> <token>

谁能看出我做错了什么?

【问题讨论】:

    标签: python command-line-interface docopt


    【解决方案1】:

    根据您在 add_user 中的使用,我看不出 CLI 将如何区分是否存在可选的 devices_file。

    在您的第二个示例中,它似乎假设 531 是您的 optional ,而您只是缺少您的 ,因为它无法将该“531”条目解释为设备文件。

    由于 devices_file 是可选的,我会这样写:

    Usage:
        add_user <user_file> <destination_account> <token> [<devices_file>]
    

    Usage:
        add_user <user_file> [-d DEVFI | --devices-file=DEVFI] <destination_account> <token>
    
    Options:
        -d DEVFI --devices-file=DEVFI    Optional devices file for blah.
    

    请注意,在文档中,选项几乎总是在最后完成。

    """Naval Fate.
    
    Usage:
      naval_fate.py ship new <name>...
      naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
      naval_fate.py ship shoot <x> <y>
      naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
    

    【讨论】:

    • 感谢您的回复,看到我遇到的问题是,我的模块(及其用法)是即时加载的 - 我在程序启动时构建了“Usa​​ge”字符串。这意味着我不能拥有“选项”部分。我会尝试你的第一个例子。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多