2014-02-06 34 views
0

我在docopt以下用法:docopt不允许可选参数

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

[<devices_file>]是一个可选参数。

但是,当我尝试使用它时,出现错误。

这工作好:

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> 

任何人都可以看到我在做什么错?

回答

1

根据您在add_user中的使用情况,如果存在或不存在可选的devices_file,我无法看到CLI如何区分。

在第二个例子中,它显示它假设531是可选的,并且你只是想念你,因为它无法将该“531”条目解释为设备文件。

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

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

OR

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] 
+0

感谢您的回复,看到我遇到的问题是,我的模块(及其用法)随时加载 - 我在程序启动时生成“Usage”字符串。这意味着我不能拥有“选项”部分。我会尝试你的第一个例子。谢谢! – TomSelleck