最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
使用docopt轻松实现python命令行参数处理
时间:2016-07-23 编辑:简简单单 来源:一聚教程网
前面认识的一个python库 docopt,可以使用__doc__来实现命令行参数的处理,使用起来非常简单;我也刚好有在命令行添加或删除testsuite/testcase的需求,所以写了一个demo文件。
PS:我才发现docopt有2年没更新了,好吧,还是可以继续用它。
直接上我的demo程序
#!/usr/bin/env python
"""Just try docopt lib for python
Usage:
try_docopt.py (-h | --help)
try_docopt.py [options]
Examples:
try_docopt.py -s +ts5,-ts2 -c +tc5,-tc3
Options:
-h, --help
-s, --testsuite suites #add/remove some testsuites
-c, --testcase cases #add/remove some testcases
"""
from docopt import docopt
testsuites = ['ts1', 'ts2', 'ts3', 'ts4']
testcases = ['tc1', 'tc2', 'tc3', 'tc4']
def add_remove(tlist, opt_list):
'''
add/remove item in tlist.
opt_list is a list like ['+ts5', '-ts2'] or ['+tc5', '-tc3'].
'''
flag = 0
for i in opt_list:
i = i.strip()
if i.startswith('+'):
tlist.append(i[1:])
elif i.startswith('-'):
if i[1:] in tlist:
tlist.remove(i[1:])
else:
print 'bad argument: %s is not in %s' % (i[1:], tlist)
flag = 1
else:
print 'bad argument: %s' % i
flag = 1
if flag:
return flag
else:
return tlist
if __name__ == '__main__':
args = docopt(__doc__)
ts_arg = args.get('--testsuite')
tc_arg = args.get('--testcase')
if ts_arg:
ts_opt_list = ts_arg.strip().split(',')
testsuites = add_remove(testsuites, ts_opt_list)
if tc_arg:
tc_opt_list = tc_arg.strip().split(',')
testcases = add_remove(testcases, tc_opt_list)
if testsuites != 1 and testcases != 1:
print 'ts: %s' % testsuites
print 'tc: %s' % testcases
Jay-Ali:py2016 jay$ python try_docopt.py -s +ts5,+ts8,-ts1 --testcase -tc3,+tc6
ts: ['ts2', 'ts3', 'ts4', 'ts5', 'ts8']
tc: ['tc1', 'tc2', 'tc4', 'tc6']
Jay-Ali:py2016 jay$
Jay-Ali:py2016 jay$ python try_docopt.py -s +ts5,+ts8,-ts1 --testcase -tc3,+tc6,-tc7
bad argument: tc7 is not in ['tc1', 'tc2', 'tc4', 'tc6']
相关文章
- PHP导出数据超时的优化建议解读 10-31
- PHP之mysql位运算解析 10-31
- Laravel实现登录跳转功能解析 10-31
- php双向队列解读 10-31
- Laravel异常上下文解决教程 10-24
- php数组查询元素位置方法介绍 10-24