python 命令接口_python命令行应用接口描述语言:docopt

应用场景解决Python命令行应用参数解析;

常用的参数解析方式sys.argv 属性,用于接收来自命令行的输入

optparse 内建模块,用于命令行参数解析

argparse 内建模块,用于命令行参数解析

使用案例

文档名称:doc.py1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32"""

docopt 的练习进程;

Usage:

doc new ...

doc ship move [--speed=] [--moored|--drifting] ...

doc ship shoot

doc mine (set|remove) [--moored|--drifting]

doc other [-abc] [--test=]

doc command [--speed=] [--] ...

doc ARGUMENT

doc -h | --help

doc --version

Options:

-h --help Show this screen.

-s KN --speed=KN Speed in knots [default: 10].

--moored Moored (anchored) mine.

--drifting Drifting mine.

-abc -a -b -c.

-t ,--test test [default: 1].

"""

from docopt import docopt

args = docopt(__doc__, version='0.01')

print(args)查看帮助,python3 doc.py --help,输出:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20PS E:pythonpython_test> python .doc.py --help

docopt 的练习进程;

Usage:

doc new ...

doc ship move [--speed=]

doc ship shoot

doc mine (set|remove) [--moored|--drifting]

doc other [-abc] [--test=]

doc command [--speed=] [--] ...

doc -h | --help

doc --version

Options:

-h --help Show this screen.

-s KN --speed=KN Speed in knots [default: 10].

--moored Moored (anchored) mine.

--drifting Drifting mine.

-abc -a -b -c.

-t ,--test test [default: 1].运行命令,python .doc.py ship arg1 move 3 4 --speed=15 --moored name1 name2 name3,输出:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25PS E:pythonpython_test> python .doc.py ship arg1 move 3 4 --speed=15 --moored name1 name2 name3

{'--': False,

'--drifting': False,

'--help': False,

'--moored': True,

'--speed': '15',

'--test': '1',

'--version': False,

'-a': False,

'-b': False,

'-c': False,

'': [],

'': ['arg1'],

'': ['name1', 'name2', 'name3'],

'': '3',

'': '4',

'command': False,

'mine': False,

'move': True,

'new': False,

'other': False,

'remove': False,

'set': False,

'ship': True,

'shoot': False}

docopt描述语言

usage pattern:用法规则关键字:Usage(不区分大小写)和空行之间的内容被解释为用法列表;

并且Usage之后的第一个单词意义为:应用进程名称;

示例中的Usage和Options之间的都为用法列表,并且以空行分割;1

2

3

4

5

6

7

8

9

10

11Usage:

doc new ...

doc ship move [--speed=] [--moored|--drifting] ...

doc ship shoot

doc mine (set|remove) [--moored|--drifting]

doc other [-abc] [--test=]

doc command [--speed=] [--] ...

doc -h | --help

doc --version

Options:

ARGUMENT:位置选项以结尾的以及全部大写字母的单词都被解释为位置option;

案例中:doc new ...

doc ARGUMENT

的 和ARGUMENT都会被解释为位置option;

-o –option:选项短option可以堆叠,例如:-abc其实是:-a -b -c

长option可以在其后面用空格:或者等号:=分割一个参数,例如:-s KN --speed=KN,-t ,--test

短option声明参数时,后面的空格是可选的,例如:-fFILE 或者: -f FILE

不过这里要注意的是:对于`--option ARGUMENT` 这种表述是模棱两可的,因为不能确定`ARGUMENT`是`--option`的参数还是一个位置option;

例如这种情况:Usage:

app --input ARGUMENT

docopt 对这种情况的解释如下:如果在Options里面声明了选项:`--option ARGUMENT`,那么它将`ARGUMENT`解释为`--option`的值

否则,`--option ARGUMENT`被解释为一个bool option:`--option`和一个位置参数:`ARGUMENT`

`-f FILE` 和 `-fFILE` 情况类似,无法确定`-fFILE`是一个堆叠起来的option还是`FILE`是option`-f`的值;

[optional elements]:可选选项

以下两种用法声明的意义相同:my_program [command --option ]

my_program [command] [--option] []

都表示:coomand,--option,是可选的选项,被用[]包裹的选项都为可选;

(required elements):必选选项

用[]声明的选项是可选的,但是用()声明的选项是必选的;my_program (--either-this | ) # --either-this 或者 必选其一

my_program [()] # 要么不需要参数要么两个参数都选

element|another:互斥选项

-a| -b声明的选项表示-a和 -b 只能选一个,为互斥关系;my_program go (--up | --down | --left | --right) # 四个选项必选且只能选择一个

my_program go [--up | --down | --left | --right] # 四个选项最多只能选择一个,可以不选

my_program (run [--fast] | jump [--high]) # run 或者 run --fase 或者 jump 或者 jump --high

element…:列表选项

可以使用:...声明多个值的选项,被解释为一个列表:my_program open ... # 最终是一个或者多个值;

my_program move ()... # 参数依次赋值给和行程列表,my_program move 3 3 4 5, 为 3 4, 为 3 5;

my_program ... # 至少有两个值;

my_program [...] # 没有值或者有只一个或者多个

my_program []... # 同上

my_program [ [...]] # 没有值或者只有一个或者只有两个或者多个

[options]:所有选项

使用:[options]可以表示所有可选的选项Usage: my_program [options]

--all List everything.

--long Long output.

--human-readable Display in human-readable format.

等价于:Usage: my_program [--all --long --human-readable]

--all List everything.

--long Long output.

--human-readable Display in human-readable format.

然而也可以仅仅列出他们其中的一部分:Usage: my_program [-alh]

-a, --all List everything.

-l, --long Long output.

-h, --human-readable Display in human-readable format.

[--]

[--]:通常用于分割位置参数和[options],防止将位置参数误认为选项

Option descriptions:选项描述

任何以-或者--开头的行都被认为是选项声明,选项描述通常是可以声明:长选项和短选项意义相同,用法:-v --verbose

选项参数,用法:-o FILE --output=FILE或者-i , --input

选项默认值,用法:[default: ]

例如:Options:

-o FILE --output=FILE # without comma, with "=" sign

-i , --input # with comma, without "=" sign

-q Quit. # 选项声明后面用最少两个空格分割描述;

-p FILE Output file. # GOOD

--stdout Use stdout. # GOOD, 2 spaces

--coefficient=K The K coefficient [default: 2.95]

--output=FILE Output file [default: test.txt]

--directory=DIR Some directory [default: ./]

参考网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值