2012-10-18 3 views
2
을 분석

문제 : 임의의 순서가 될 수있는 몇 가지 특정 인수를 구문 분석 할 필요가 아닌 선택 사항입니다 : -h -d -src -dst파이썬 2.6 - 인수

오전 파이썬에 새로운 대안 등을 살펴 보았다 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

는 파이썬 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

v2.7부터 deprecated되었으므로 optparse가 간과되었지만 v2.6을 사용하는 것과 여전히 관련이 있습니다. – koola

+0

가장 중요한 비트를 알아내는 다른 사람에게주의하십시오 :'options'는 객체이고 인수는 속성으로 추가됩니다. 위의 예제에서, args는'options.filename'과'options.verbose'에 들어갑니다. – mpen