2012-10-18 60 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