2011-11-16 2 views
3

클린optparse을 우회하거나 처리하려면 일반적인 -XXX 옵션을 사용하는 것이 좋습니다.덜 제한적인 기능을 제공하는 파이썬 인수

제 경우 제가

-

예컨대 이후 정의 된 숫자로 애플리케이션의 출력 항목을 제한하는 옵션 같은 less을 제공하고자하는 어플리케이션 인

myapp.py list -10 

은 내가 오류를 제기에서 optparse를 방지하고 수동 구문 분석/사용자 정의 인수를 제거 sys.argv DICT를 덮어 쓸 수도 있겠죠, 그러나 이것은 lib 디렉토리 예견을 optparse의 경우이며, 더 나은 방식을 제공하는 경우 궁금하네요 해.

+6

: 기본적으로 수를 시작할 수 있습니다 각 숫자에 대한 개별 옵션을 정의 대신 argparse를 살펴 보는 것이 좋습니다. 'argparse'에 대해서 +1 –

+0

+1이 가능합니다. 'optparse'에서 이것을하기 위해서는 커스텀'Option' 클래스와 커스텀'OptionParser' 클래스가 필요합니다. 그렇더라도 옵션 클러스터를이 "베어"옵션과 구별하는 것은 까다 롭습니다 (예를 들어,'myapp.py list -10'는'myapp.py list -1 -0' (optparse의 기본값) 또는'-10'을 의미합니까? – Lemur

+0

). 의견을 주셔서 감사합니다, 내가 어떻게 argparse와 함께 달성 할 수 있습니까? – vinilios

답변

0

argparse에서 선택적 위치 정수 인수를 정의 할 수 있습니다. 예를 들어, 사용,

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('limit', type=int, nargs='?') 
args = parser.parse_args() 
if args.limit is not None: 
    print "Limiting to %d." % -args.limit 

기본 도움말 텍스트는이 경우 합리적인 아니라, add_argumentmetavar 키워드 인수를 조정할 수 있습니다 : 음의 값은 다음 옵션을 제공처럼 사용자에게 보일 것 "-n".

필자는 optparse를 사용하여이 작업을 수행하는 대신 불쾌한 방법을 제안 할 수 있습니다. 내가 좋겠 또한 0 요구 사항이 고려되어야할지에 대해 생각 최대 9까지 모든 숫자에 대한 등등

from optparse import OptionParser 
parser = OptionParser() 
parser.add_option("-1") 
parser.add_option("-2") 
options,args = parser.parse_args() 
if options.__dict__["1"] is not None: 
    print "Your number was %d." % (int("1"+options.__dict__["1"])) 
elif options.__dict__["2"] is not None: 
    print "Your number was %d." % (int("2"+options.__dict__["2"])) 

및 ...

+0

불쾌 실제로 :) 내 경우에는 이후 숫자가 무한대로 1이 되길 원합니다. – vinilios

+1

음, 숫자는 최대 (그러나 제외) 무한대 수 있습니다. 1 - 9에 대한 옵션 만 있으면되고 나머지 숫자는 옵션 인수에서 가져옵니다. 실제로 – silvado

+0

.......... – vinilios