天天看点

Dive Into Python学习日志

Dive Into Python学习日志

def  main (argv):

Dive Into Python学习日志

     try :

Dive Into Python学习日志

    opts,args  =  getopt.getopt (argv,  " hg:d " , [ " help " , " grammar= " ])

Dive Into Python学习日志

     except  getopt.GetoptError:

Dive Into Python学习日志

    usage()

Dive Into Python学习日志

    sys.exit( 2 )

Dive Into Python学习日志

     for  opt, arg  in  opts:

Dive Into Python学习日志

     if  opt  in  ( ' -h ' , ' --help ' ):

Dive Into Python学习日志

        usage ()

Dive Into Python学习日志

        sys.exit()

Dive Into Python学习日志

     elif  opt  ==   ' -d ' :

Dive Into Python学习日志

         global  _debug

Dive Into Python学习日志

        _debug  =   1

Dive Into Python学习日志

     elif  opt  in  ( ' -g ' , ' --grammar ' ):

Dive Into Python学习日志

        grammar  =  arg

Dive Into Python学习日志

    source  =   "   " .join(args)

Dive Into Python学习日志
Dive Into Python学习日志

if   __name__   ==   " __main__ " :

Dive Into Python学习日志

    main (sys.argv[ 1 :])

这段代码很有实用价值。应该能看懂这部分代码的大致意思。

首先sys.argv可以获取命令行参数,可以尝试下面的程序:

<code>

# getparams.py

import sys

print sys.argv

</code>

再如下运行它:

python getparams.py -h -i in --out out.xml

结果为:

['getparams.py','-h','-i','in','--out','out.xml']

如此,sys.argv的工作也就明白了。所以要传递参数只需sys.argv[1:]

下面再看关健的getopt.getopt:

先看下它的参数格式

    getopt.getopt (args,"",[longopts])

第一个参数是命令行参数列表,也就是要解析的所有内容

第二个参数是列出所有关心的短参数,短参数如-d our.xml

第三个参数是列出所有关心的长参数,长参数如 --help 是可选的

另外,不论长参数还是短参数都有两种形式

开关型参数,即后面不用跟值就可完整表达意思,如 -h, --help

普通型参数,后面要跟上一个值来表达出完整意思,如 -i in.xml --out out.xm

为了函数getopt.getopt能区分出这两种参数,它定义自己的表达规则:

如果一个短参数是开关型参数,那么直接在参数列表中列出就可,如h,但如果遇到这个短参数i:表明在-i后面的一个值是它的参数值。

长参数和短参数基本类似,只是它不是后面加冒号,而是加‘=’

所以下面的语句意思应该就很清楚了

    getopt.getopt (args,'hd:vi:',['help','out='])

它关心的是命令行中 -h,-d,-v,-i,--help和--out,其中-h,-v,--help是开关型参数,其它不是:)

这个函数返回的是两个list变量opts和args. opts是一个包括了所以我们关心的命令行中的参数及它们的值(如果是开关型参数,那么值为空),args就是其实所有的参数。

所以程序中for循环部分也就容易理解了。

下面给出一个例子方便理解:

argv = ['-h','-i','in.xml','-v','-d','debug','--help','--out','out.xml','file1','file2']

执行下列语句

    opts,args = getopt.getopt(argv,'hi:vd:',['--help','out=']

后,opts为:

[('-h',''),('-i','in.xml'),('-v',''),('-d','debug'),('--help',''),('--out','out.xml')]

args为:

['file1','file2']

到此,这部分代码就理解完了。是一段很有用的代码样例啊。