python模块学习---getopt(命令行参数处理)

时间:2021-04-19 14:29:56

1. sys.argv

sys.argv为python的命令行参数列表,sys.argv[0]保存脚本的文件名,从参数1开始,sys.argv保存的是命令行的其他参数,len(sys.argv)为包括脚本文件名在内的命令行参数的个数。

例如:test.py

[python] view plaincopy
  1. import sys   
  2.   
  3. print "脚本名:", sys.argv[0]   
  4. for i in range(1, len(sys.argv)):   
  5.     print "参数", i, sys.argv[i]   

>>>python test.py hello world
脚本名:test.py
参数 1 hello
参数 2 world

2. getopt.getopt()函数

getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。

e.g. python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b'

    import getopt

    shortargs = ‘f:t’
    longargs = ['directory-prefix=', 'format', 'f_long=']
    opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )


getopt函数的格式是getopt.getopt ( [命令行参数列表], '短选项', [长选项列表] ),注意:短选项必须要以字符串的格式定义,长选项必须要以列表的格式定义
短选项名后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。
长选项名后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。
返回opts和args。
opts是一个参数选项及其value的元组的列表[( '-f', 'hello'), ( '-t', '' ), ( '--format', '' ), ( '--directory-prefix', '/home‘’) ]注意:短选项前自动加上‘-’,长选项前自动加上‘--’
args是参数的列表 ['a', 'b' ]

然后遍历opts便可以获取所有的命令行选项及其对应参数了。
    for opt,value in opts:
    if opt=='-f':
        print '-f的值是:',value
    if opt == '-t':
        print '-t的参数为空'
    if opt == '--directory-prefix':
        print '--directory-prefix的值是:',value
    if opt == 'format':
        print 'format的参数为空'
    if opt == '--f_long':
        print '--f_long的值是:',value
for arg in args:
    print '参数为:',arg

运行结果为:

-f的值是: hello
--directory-prefix的值是: /home
-t的参数为空
参数为: a
参数为: b

---------------------------------------------------------------

两个来自python3.3 Documentation的例子:

第一个

>>> import getopt

>>> args = '-a -b -cfoo -d bar a1 a2'.split()

>>> args

['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']

>>> optlist, args = getopt.getopt(args, 'abc:d:')

>>> optlist

[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]

>>> args

['a1', 'a2']

 

第二个

>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'

>>> args = s.split()

>>> args

['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']

>>> optlist, args = getopt.getopt(args, 'x', [... 'condition=', 'output-file=', 'testing'])

>>> optlist

[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]

>>> args

['a1', 'a2']