Skip to content

Commit 2c4ca63

Browse files
committed
审核完成:“Python 命令行之旅:深入 docopt”
1 parent d7bbc7c commit 2c4ca63

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

contents/Python/cmdline/docopt-2.md

+13-11
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
在上一篇文章中我们提到 `docopt` 是通过定义一个包含特定内容的字符串,也就是接口描述,来达到描述命令行功能的目的。
1616
那么接口描述的总体规则是这样的:
1717

18-
- 位于关键字 `usage:` (大小写不敏感)和一个可见的空行之间的文本内容会被解释为一个个使用模式。
18+
- 位于关键字 `usage:`(大小写不敏感)和一个可见的空行之间的文本内容会被解释为一个个使用模式。
1919
- `useage:` 后的第一个词会被解释为程序的名称,比如下面就是一个没有命令行参数的示例程序:
2020

2121
```
@@ -33,7 +33,7 @@ Usage:
3333
cli <repeating-argument> <repeating-argument>...
3434
```
3535

36-
### 2.1 位置参数: <argument>
36+
### 2.1 位置参数:<argument>
3737

3838
使用 `<``>` 包裹的参数会被解释为位置参数。
3939

@@ -56,7 +56,7 @@ print(arguments)
5656
'<y>': '2'}
5757
```
5858

59-
### 2.2 选项参数: -o --option
59+
### 2.2 选项参数:-o --option
6060

6161
以单个破折号(`-`)开头的的参数为短选项,以双破折号(`--`)开头的参数为长选项。
6262

@@ -137,7 +137,7 @@ $ python3 cli.py delete -r
137137
'delete': True}
138138
```
139139

140-
### 2.4 可选元素: [optional elements]
140+
### 2.4 可选元素:[optional elements]
141141

142142
以中括号“[]”包裹的元素(选项、参数和命令)均会被标记为可选。多个元素放在一对中括号中或各自放在中括号中是等价的。比如:
143143

@@ -151,7 +151,7 @@ Usage: cli [command --option <argument>]
151151
Usage: cli [command] [--option] [<argument>]
152152
```
153153

154-
### 2.5 必填元素: (required elements)
154+
### 2.5 必填元素:(required elements)
155155

156156
没被中括号“[]”包裹的所有元素默认都是必填的。但有时候使用小括号“()”将元素包裹住,用以标记必填是有必要的。
157157
比如,要将多个互斥元素进行分组:
@@ -166,9 +166,9 @@ Usage: my_program (--either-this <and-that> | <or-this>)
166166
Usage: my_program [(<one-argument> <another-argument>)]
167167
```
168168

169-
这个例子中`<one-argument>``<another-argument>` 要么都出现,要么都不出现。
169+
这个例子中 `<one-argument>``<another-argument>` 要么都出现,要么都不出现。
170170

171-
### 2.6 互斥参数: element|another
171+
### 2.6 互斥参数:element|another
172172

173173
`argparse` 中要想实现互斥参数,还需要先调用 `parser.add_mutually_exclusive_group()` 添加互斥组,
174174
再在组里添加参数。而在 `docopt` 中就特别简单,直接使用 `|` 进行分隔:
@@ -197,7 +197,7 @@ Usage: my_program run [--fast]
197197
Usage: my_program (run [--fast] | jump [--high])
198198
```
199199

200-
### 2.7 可变参数列表: element...
200+
### 2.7 可变参数列表:element...
201201

202202
可变参数列表也就是定义参数可以有多个值。在 `argparse` 中,我们通过 `parser.add_argument('--foo', nargs='?')` 来指定,其中 `nargs` 可以是数字、`?``+``*`来表示参数个数。
203203

@@ -307,8 +307,8 @@ Options:
307307
Other: --bad # 坏, 没有以 "-" 开头
308308
```
309309
310-
选项描述中,使用空格或“=”来连接选项和参数,以定义带选项的参数。参数可以使用`<Arg>`的形式,
311-
或是使用`ARG`大写字母的形式。可用逗号“,”来分隔长短选项。比如:
310+
选项描述中,使用空格或“=”来连接选项和参数,以定义带选项的参数。参数可以使用 `<Arg>` 的形式,
311+
或是使用 `ARG` 大写字母的形式。可用逗号“,”来分隔长短选项。比如:
312312
313313
```bash
314314
-o FILE --output=FILE # 没有逗号 长选项使用 "=" 分隔
@@ -335,8 +335,10 @@ Other: --bad # 坏, 没有以 "-" 开头
335335
336336
## 三、小结
337337
338-
关于 `docopt` 的方方面面我们都了解的差不多了,回过头来看,对于命令行元信息的定义,它比 `argparse` 要来的更加简洁。
338+
关于 `docopt` 的方方面面我们都了解的差不多了,回过头来看。对于命令行元信息的定义,它比 `argparse` 要来的更加简洁。
339+
339340
`argparse` 像是命令式编程,调用一个个的函数逐步将命令行元信息定义清楚;而 `docopt` 则像是声明式编程,通过声明定义命令行元信息。
341+
340342
两者站在的维度不同,编程的套路也不尽相同,甚是有趣。
341343
342344
了解了这么多,也该练练手了。在下篇文章中,我们仍然会以 `git` 命令作为实战项目,看看如何使用 `docopt` 来实现 `git` 命令。

0 commit comments

Comments
 (0)