大体来说,有两种方式来处理命令行参数,一种是利用系统模块sys,另一种是利用现成的参数处理模块getopt
1 利用sys
每个传递给程序的命令行参数都在 sys.argv 中,而它仅仅是一个列表。关于 sys.argv 需要了解的第一件事情就是:它包含了你正在调用的脚本的名称。
这种方法可以看作是一种开发者的手工解析方法,对于一些简单的需求可以处理,但是对于复杂的需求就不那么好用了。下面是一个例子:
-
#callarg.py
-
import sys
-
-
# 如果命令行下没有敲入选项参数,就提示用户
-
# 大家注意,sys.argv的第一个值是命令本身
-
if len(sys.argv) < 2:
-
print u'请输入选项参数: -R -r -b -en'
-
-
# 打印出所有命令行参数,并检查-R -r -b -e 选项
-
# 这里从argv数组的第二个值开始循环
-
for i in sys.argv[1:]:
-
if i == '-R':
-
print 'this is ' + i
-
elif i == '-r':
-
print 'this is ' + i
-
elif i == '-b':
-
print 'this is ' + i
-
elif i == '-e':
-
print 'this is ' + i
-
else:
-
print i + u'不是有效的选项参数'
2. 利用getopt
getopt是一个强大的参数处理模块,它能够处理复杂、专业的命令行参数的解析,它有两种参数处理方式,短模式和长模式。
详细文档可以参考
-
>>> 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']
一个例子
-
import getopt, sys
-
-
def main():
-
try:
-
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
-
except getopt.GetoptError as err:
-
# print help information and exit:
-
print str(err) # will print something like "option -a not recognized"
-
usage()
-
sys.exit(2)
-
output = None
-
verbose = False
-
for o, a in opts:
-
if o == "-v":
-
verbose = True
-
elif o in ("-h", "--help"):
-
usage()
-
sys.exit()
-
elif o in ("-o", "--output"):
-
output = a
-
else:
-
assert False, "unhandled option"
-
# ...
-
-
if __name__ == "__main__":
-
main()
3 argparse
argparse是另一种更加强大的处理工具,可以很方便的生成帮助信息等等。
具体可以参考:
/>
http://blog.xiayf.cn/2013/03/30/argparse/
-
import argparse
-
-
if __name__ == '__main__':
-
parser = argparse.ArgumentParser()
-
parser.add_argument('-o', '--output')
-
parser.add_argument('-v', dest='verbose', action='store_true')
-
args = parser.parse_args()
-
# ... do something with args.output ...
-
# ... do something with args.verbose ..
阅读(1856) | 评论(0) | 转发(0) |