Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2445133
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: Python/Ruby

2013-05-23 13:29:52

大体来说,有两种方式来处理命令行参数,一种是利用系统模块sys,另一种是利用现成的参数处理模块getopt


1 利用sys

每个传递给程序的命令行参数都在 sys.argv 中,而它仅仅是一个列表。关于 sys.argv 需要了解的第一件事情就是:它包含了你正在调用的脚本的名称。
这种方法可以看作是一种开发者的手工解析方法,对于一些简单的需求可以处理,但是对于复杂的需求就不那么好用了。下面是一个例子:

  1. #callarg.py
  2. import sys
  3.   
  4. # 如果命令行下没有敲入选项参数,就提示用户
  5. # 大家注意,sys.argv的第一个值是命令本身
  6. if len(sys.argv) < 2:
  7.     print u'请输入选项参数: -R -r -b -en'
  8.   
  9. # 打印出所有命令行参数,并检查-R -r -b -e 选项
  10. # 这里从argv数组的第二个值开始循环
  11. for i in sys.argv[1:]:
  12.     if i == '-R':
  13.         print 'this is ' + i
  14.     elif i == '-r':
  15.         print 'this is ' + i
  16.     elif i == '-b':
  17.         print 'this is ' + i
  18.     elif i == '-e':
  19.         print 'this is ' + i
  20.     else:
  21.         print i + u'不是有效的选项参数'


2. 利用getopt

getopt是一个强大的参数处理模块,它能够处理复杂、专业的命令行参数的解析,它有两种参数处理方式,短模式和长模式。
详细文档可以参考
  1. >>> import getopt
  2. >>> args = '-a -b -cfoo -d bar a1 a2'.split()
  3. >>> args
  4. ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
  5. >>> optlist, args = getopt.getopt(args, 'abc:d:')
  6. >>> optlist
  7. [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
  8. >>> args
  9. ['a1', 'a2']
长模式
  1. >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
  2. >>> args = s.split()
  3. >>> args
  4. ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
  5. >>> optlist, args = getopt.getopt(args, 'x', [
  6. ... 'condition=', 'output-file=', 'testing'])
  7. >>> optlist
  8. [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
  9. >>> args
  10. ['a1', 'a2']
一个例子
  1. import getopt, sys

  2. def main():
  3.     try:
  4.         opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
  5.     except getopt.GetoptError as err:
  6.         # print help information and exit:
  7.         print str(err) # will print something like "option -a not recognized"
  8.         usage()
  9.         sys.exit(2)
  10.     output = None
  11.     verbose = False
  12.     for o, a in opts:
  13.         if o == "-v":
  14.             verbose = True
  15.         elif o in ("-h", "--help"):
  16.             usage()
  17.             sys.exit()
  18.         elif o in ("-o", "--output"):
  19.             output = a
  20.         else:
  21.             assert False, "unhandled option"
  22.     # ...

  23. if __name__ == "__main__":
  24.     main()


3 argparse

argparse是另一种更加强大的处理工具,可以很方便的生成帮助信息等等。
具体可以参考:
/> http://blog.xiayf.cn/2013/03/30/argparse/

  1. import argparse

  2. if __name__ == '__main__':
  3.     parser = argparse.ArgumentParser()
  4.     parser.add_argument('-o', '--output')
  5.     parser.add_argument('-v', dest='verbose', action='store_true')
  6.     args = parser.parse_args()
  7.     # ... do something with args.output ...
  8.     # ... do something with args.verbose ..

阅读(1856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~