Pythonic command line arguments parser, that will make you smilepython
中有很多模块可以传入参数,例如argparse、docopt,我一开始在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'}
这个模块的具体使用方法请看文档,这里只指出一些需要注意的点:
- 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
2Usage:
python 01.docopt.py [--input=<path>] [--speed=<kn>]
- 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