找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2169|回复: 0

[求助] 命令解析库docopt的用法?

回帖奖励 1 点威望 回复本帖可获得 1 点威望奖励! 每人限 1 次(中奖概率 50%)

2

主题

3

帖子

3

积分

贫民

积分
3
xiaomaolove 发表于 2018-6-16 18:54:34 | 显示全部楼层 |阅读模式
本帖最后由 xiaomaolove 于 2018-6-16 18:55 编辑

不输入可选项的时候不能识别命令,请各位大大帮我看看怎么回事。
代码如下:
  1. """Naval Fate.

  2. Usage:
  3.     access-list <access-list-number> [dynamic <dynamic-name> [timeout <minutes>]] (deny | permit) <protocol> <source> <source-wildcard> <destination> <destination-wildcard> [precedence <precedence> | dscp <dscp> | tos <tos> | time-range <time-range-name> | fragments | log [<word>] | log-input [<word>]]

  4. Opti**:

  5. """
  6. from docopt import docopt

  7. if __name__ == '__main__':
  8.     arguments = docopt(__doc__, version='Naval Fate 2.0')
  9.     print("  {0:<40}{1:<20}{2:<20}".format("kye", "value", "type"))
  10.     print("  {0:-<80}".format(""))
  11.     for k,v in arguments.items():
  12.         print("  {0:<40}{1:<20}{2:<20}".format(str(k), str(v), str(type(v))))
复制代码

[dynamic <dynamic-name> [timeout <minutes>]]是可选项,如果不输入这个可选项的话docopt不能识别这个命令:
C:\share>py access-list.py 1 deny ip any any any any
Usage:
access-list <access-list-number> [dynamic <dynamic-name> [timeout <minutes>]] (deny | permit) <protocol> <source> <source-wildcard> <destination> <destination-wildcard> [precedence <precedence> | dscp <dscp>
| tos <tos> | time-range <time-range-name> | fragments | log [<word>] | log-input [<word>]]
把这个可选项加到命令之后才能识别:
C:\share>py access-list.py 1 dynamic dynamic-name timeout 2 deny ip any any any any
  1. --------------------------------------------------------------------------------
  2.   <access-list-number>                    132                 <class 'str'>
  3.   dynamic                                 True                <class 'bool'>
  4.   <dynamic-name>                          dynamic-name        <class 'str'>
  5.   timeout                                 True                <class 'bool'>
  6.   <minutes>                               2                   <class 'str'>
  7.   deny                                    True                <class 'bool'>
  8.   permit                                  False               <class 'bool'>
  9.   <protocol>                              ip                  <class 'str'>
  10.   <source>                                any                 <class 'str'>
  11.   <source-wildcard>                       any                 <class 'str'>
  12.   <destination>                           any                 <class 'str'>
  13.   <destination-wildcard>                  any                 <class 'str'>
  14.   precedence                              False               <class 'bool'>
  15.   <precedence>                            None                <class 'NoneType'>
  16.   dscp                                    False               <class 'bool'>
  17.   <dscp>                                  None                <class 'NoneType'>
  18.   tos                                     False               <class 'bool'>
  19.   <tos>                                   None                <class 'NoneType'>
  20.   time-range                              False               <class 'bool'>
  21.   <time-range-name>                       None                <class 'NoneType'>
  22.   fragments                               False               <class 'bool'>
  23.   log                                     False               <class 'bool'>
  24.   <word>                                  None                <class 'NoneType'>
  25.   log-input                               False               <class 'bool'>
复制代码

可是用中括号[]括起来的是可选项啊,应该是可输入也可不输入的吧。
上面的输出结果里,最后的<word>没有被识别出来,希望这个信息可以给各位大大参考。

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表