在python中用docopt模块传入参数

Pythonic command line arguments parser, that will make you smile

python中有很多模块可以传入参数,例如argparsedocopt,我一开始在BUSCO的软件的某个脚本中看到了使用argparse模块的,但是我在看完相关的文档后觉得太麻烦了,有人在博客中说珍爱生命,远离argparse,与perl中的getopt模块的使用方法相去甚远。不过还好找到了docopt这个模块,这个模块方便简单优美有效,将书写usage的过程与设置参数的过程完美结合。
于是尝试试一下这个模块:

1
2
3
4
5
6
7
8
9
10
11
12
"""Duo Xie
Usage:
01.docopt.py [--input=<path>] [--speed=<kn>]

Options:
--input=<path> the path of input file [default: ./test.py].
--speed=<kn> the number test [default: 2.95].
"""
from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__)
print(arguments)

然后执行

1
python 01.docopt.py

得到输出

1
2
{'--input': './test.py',
'--speed': '2.95'}

这个模块的具体使用方法请看文档,这里只指出一些需要注意的点:

  1. Usage
    usage时不要在脚本名称前面加上python,即不要写成
    1
    python 01.docopt.py [--input=<path>] [--speed=<kn>]

而是写成

1
01.docopt.py [--input=<path>] [--speed=<kn>]

否则的话python 01.docopt.py就会认为格式不对:

1
2
Usage:
python 01.docopt.py [--input=<path>] [--speed=<kn>]

  1. Options
    1
    2
    --input=<path> the path of input file [default: ./test.py].
    --speed=<kn> the number test [default: 2.95].

这两行内容前面不要使用制表符,应该使用空格。这里应该注意,即使是使用四个空格,和使用制表符的效果也是不一样的,因为这在电脑中是两种不同的符号,我们如果用空格,那么cat -A 01.docopt.py显示的是:

1
2
3
4
5
6
7
8
9
10
11
12
"""Duo Xie$
Usage:$
01.docopt.py [--input=<path>] [--speed=<kn>]$
$
Options:$
--input=<path> the path of input file [default: ./test.py].$
--speed=<kn> the number test [default: 2.95].$
"""$
from docopt import docopt$
if __name__ == '__main__':$
arguments = docopt(__doc__)$
print(arguments)$

但是如果使用制表符,那么cat -A 01.docopt.py显示的是:

1
2
3
4
5
6
7
8
9
10
11
12
"""Duo Xie$
Usage:$
01.docopt.py [--input=<path>] [--speed=<kn>]$
$
Options:$
^I--input=<path> the path of input file [default: ./test.py].$
^I--speed=<kn> the number test [default: 2.95].$
"""$
from docopt import docopt$
if __name__ == '__main__':$
arguments = docopt(__doc__)$
print(arguments)$

参考:
http://docopt.org/
https://github.com/docopt/docopt/issues/118
https://stackoverflow.com/questions/26592289/how-can-text-in-the-options-configuration-of-docopt-be-wrapped
https://xuanwo.org/2016/04/04/docopt-intro/
https://www.jianshu.com/p/9ae4cf88e552
https://wp-lai.gitbooks.io/learn-python/content/0MOOC/docopt.html

------本文结束欢迎留言(你的邮箱将不会被显示)------