真正的命令行参数
-c/--chars:命令行选项
dest:为选项定义变量名,值characters就是’-c’选项的名字
default=False:characters的值False,意思是默认情况下命令不带-c选项
help:选项的解释说明部分
[[email protected] wc]# vim 9_optparse.py #!/usr/bin/env python import sys, os from optparse import OptionParser parser = OptionParser() parser.add_option("-c", "--char", dest="chars", action="store_true", default=False, help="only count chars") parser.add_option("-w", "--word", dest="words", action="store_true", default=False, help="only count words") parser.add_option("-l", "--line", dest="lines", action="store_true", default=False, help="only count lines") options, args = parser.parse_args() print options, args data = sys.stdin.read() chars = len(data) words = len(data.split()) lines = data.count(‘\n‘) if options.chars: print chars, if options.words: print words, if options.lines: print lines [[email protected] wc]# cat /etc/hosts | python 9_optparse.py -c {‘chars‘: True, ‘lines‘: False, ‘words‘: False} [] 1534 [[email protected] wc]# cat /etc/hosts | python 9_optparse.py -c -w {‘chars‘: True, ‘lines‘: False, ‘words‘: True} [] 1534 74 [[email protected] wc]# cat /etc/hosts | python 9_optparse.py -c -w -l {‘chars‘: True, ‘lines‘: True, ‘words‘: True} [] 1534 74 19 [[email protected] wc]# cat /etc/hosts | python 9_optparse.py {‘chars‘: False, ‘lines‘: False, ‘words‘: False} []
options和args理解?
parse_args()这个方法返回两个值,options和args,分别是对象和列表,options里包括所有使用parser.add_option()这个方法定义的选项,比如‘-w‘。
options.words就是存储‘-w‘这个选项的,它的值是True或者False,比如脚本后面带-w选项时,那么options.words的值就是True。
下面这个在ipython下的输出,由于没有使用add_option()定义任何选项,所以options的输出里没有选项的值。
这个是python自带的模块,想具体了解它的内部是如何实现的,源码文件在这个位置,/usr/lib64/python2.6/optparse.py。
脚本中这样定义的:dest = "characters",
后面应该这样判断:if options.characters,而不是if options.chars
dest和action有什么用?看Help似乎没怎么提到?
在代码里引用选项时需要dest后面定义的那个名字,比如引用-c选项,就使用options.characters,每个选项都需要dest去定义一个名字,这个值就是选项的名字,目的就是在程序中去引用这个选项,比如:if not (options.characters or options.words or options.lines):括号里就是在引用这些选项。
有的命令后面的选项就是一个字母,有的不仅有字母,而且后面还有值,比较一下下面这两个命令:
wc -l /etc/passwd
tail -n 20 /etc/passwd
-l与-n都是选项,但是行为不一样,-l后面没有值,-n后面有值,那么选项后面带不带值是action决定的,如果action="store_true",那么说明选项后面没有值,如果action=‘store‘,说明选项后面需要带值。
脚本后面跟-h时,可以看到help定义的内容。
那default又是有什么作用,为False和True分别表示什么?
拿-c选项举例子,
default如果为True,表示脚本后面如果不加-c选项,默认也是有-c的行为的。
default为False时,表示脚本后面不加-c选项,就没有-c的行为,比如wc -l /etc/hosts,没有-c选项,就说明不对字符统计,只对行数统计