2012-10-18 61 views
2

问题:需要分析这可能是任何顺序的一些具体参数,非可选:-h -d -src -dst的Python 2.6 - 解析参数

是新来的Python和已经看过了替代品,作为getopt和argparse,但不能得到一个工作的例子,所以去了下面的定制;

argv=sys.argv[1:] 
args=[] 
for idx, arg in enumerate(argv): 
    # if is arg 
    if arg.startswith("-"): 
     # find arg match 
     for i in ("-h","-d:","-src:","-dst:"): 
      # requires var 
      if i == arg + ':' and idx < len(argv)-1: 
       if not argv[idx+1].startswith("-"): 
        args.append((arg,argv[idx+1])) 
        break 
      # no var 
      elif i == arg: 
       args.append((arg,"")) 
       break 
    else: 
     continue 
# may contain duplicates 
print(args) 
# no dupes 
print(set(args)) 

任何人都可以提出改进和/或更好的例子来实现问题的目标?

+0

你可以看看这个http://www.alexonlinux.com/pythons-optparse-for-human-beings – avasal

+0

我认为值得一提的是,你所追求的战略也是可敬的。一个改进可能是在接收到无法识别的参数(不是以“ - ”开头)或选项(可以)时抱怨。 – dubiousjim

+0

@avasal这是一个伟大的阅读,确实帮了很多,谢谢! – koola

回答

4

在Python 2.6有一个叫optparse

模块,你想要做什么。从文档

例如:

from optparse import OptionParser 
[...] 
parser = OptionParser() 
parser.add_option("-f", "--file", dest="filename", 
        help="write report to FILE", metavar="FILE") 
parser.add_option("-q", "--quiet", 
        action="store_false", dest="verbose", default=True, 
        help="don't print status messages to stdout") 

(options, args) = parser.parse_args() 

另一个例子:

usage = "usage: %prog [options] arg1 arg2" 
parser = OptionParser(usage=usage) 
parser.add_option("-v", "--verbose", 
        action="store_true", dest="verbose", default=True, 
        help="make lots of noise [default]") 
parser.add_option("-q", "--quiet", 
        action="store_false", dest="verbose", 
        help="be vewwy quiet (I'm hunting wabbits)") 
parser.add_option("-f", "--filename", 
        metavar="FILE", help="write output to FILE") 
parser.add_option("-m", "--mode", 
        default="intermediate", 
        help="interaction mode: novice, intermediate, " 
         "or expert [default: %default]") 
+0

忽略了optparse,因为它从v2.7开始已被弃用,但仍然与使用v2.6相关 – koola

+0

注意其他人试图找出最重要的位:'options'是一个对象,并且您的参数将作为属性添加。在上面的例子中,参数被放入'options.filename'和'options.verbose'中。 – mpen