forked from 54shady/linuxc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpython_getopt.py
More file actions
61 lines (51 loc) · 1.78 KB
/
Copy pathpython_getopt.py
File metadata and controls
61 lines (51 loc) · 1.78 KB
1
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python
# coding=utf-8
# 模块最前面用3个单引号或双引号的多行注释即__doc__变量内容
'''
====================================
Python getopt exaple usage
print "python_getopt <-h | --help>"
print "python_getopt <-v | --verbose>"
print "python_getopt <-p | --path> <arg>"
print "python_getopt --longopt_no_args"
print "python_getopt -s <arg>"
====================================
'''
import getopt, sys
def main(argv):
def show_usage(docstring):
print docstring.rstrip("\n")
if len(argv) < 2:
show_usage(__doc__)
sys.exit(1)
# 看字符右边是否有":"
# 单字符加冒号表示选项有且必须加参数
# p, s, x右边都有':'所以必须跟选项参数(optarg)
# 单个字符表示选项没有参数
# h, v, p右边没有':'所以可以不需要跟选项参数(optarg)
# 在long_opts里有=号的就必须有args
# opts 和long_opts并没有顺序上的对应关系,
# 他们之间是否关联看下面循环里如何处理而已
try:
opts, args = getopt.getopt(sys.argv[1:], "hvp:s:", ["help", "verbose",
"path=", "longopt_no_args"])
except getopt.GetoptError as err:
print str(err) # will print something like "option -a not recognized"
show_usage(__doc__)
sys.exit(2)
for o, a in opts:
if o in ("-h", "--help"):
show_usage(__doc__)
sys.exit()
elif o in ("-v", "--verbose"):
print 'verbose enable'
elif o in ("-p", "--path"):
print 'path=' + a
elif o in ("--longopt_no_args"):
print 'this longopt no args'
elif o in ("-s"):
print 's option is ==> %s' % a
else:
print 'default'
if __name__ == "__main__":
main(sys.argv)