1. sys.argv
sys.argv为python的命令行参数列表,sys.argv[0]保存脚本的文件名,从参数1开始,sys.argv保存的是命令行的其他参数,len(sys.argv)为包括脚本文件名在内的命令行参数的个数。
例如:test.py
>>>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']