Dive Into Python学习日志

 
def  main (argv):
    
try :
    opts,args 
=  getopt.getopt (argv,  " hg:d " , [ " help " , " grammar= " ])
    
except  getopt.GetoptError:
    usage()
    sys.exit(
2 )
    
for  opt, arg  in  opts:
    
if  opt  in  ( ' -h ' , ' --help ' ):
        usage ()
        sys.exit()
    
elif  opt  ==   ' -d ' :
        
global  _debug
        _debug 
=   1
    
elif  opt  in  ( ' -g ' , ' --grammar ' ):
        grammar 
=  arg
    source 
=   "   " .join(args)

if   __name__   ==   " __main__ " :
    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']

到此,这部分代码就理解完了。是一段很有用的代码样例啊。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值