2012-03-08 8 views
0

저는 argh 라이브러리를 사용하여 파이썬 명령 행 도구를 만듭니다. 제가 사용하고있는 이름 중 몇 개는 꽤 길었습니다. 예 :argh를 사용하여 약어를 설정하는 쉬운 방법

./my_program.py download-and-parse-data --randomize-order --training-percent 80 

약자를 허용하는 간단한 방법이 있습니까? 예를 들어, 위의 줄의 잠재적 인 축약 버전이 있습니다. 긴, 정보 버전뿐만 아니라 짧고 쉬운 타입 버전 -

./my_program.py dpd -r -t 80 

이상적으로, 나는 모두 명령 줄 양식을 사용할 수 있도록하고 싶습니다. 이것을 할 수있는 좋은 방법이 있습니까?

답변

0

argparseadd_subparsers() 방법을 사용하면 매우 쉽게 수행 할 수 있습니다. 문서 here을 참조하십시오. 귀하의 경우에는

그것은이로 분해 될 수 있습니다

parser = argparse.ArgumentParser() 
subs = parser.add_subparsers() 
dpd = subs.add_parser('download-and-parse-data', aliases=['dpd']) 
dpd.add_argument(...) 
... 

EDIT 각 add_argument()에서

당신은 여러 인자 이름을 사용할 수 있습니다 호출합니다. docs here을 참조하십시오. 예컨대 다음 argparse 대답이 수락 동안, 원래의 질문은 간단 argh 모듈이 작업을 수행하는 방법이었다

parser.add_argument('-f', '--foo') 
3

. 방법은 다음과 같습니다.

from argh import * 
from show import show # only needed for demonstration purposes 

CMD_ALIASES = { 'dpd' : 'download-and-parse-data', 
       'dp' : 'download-and-parse-data', 
       'dd' : 'download-data', 
       'pd' : 'parse-data', } 

def choices_for(d): 
    """ 
    Return list of unique items (command aliases plus unabridged commands). 
    Works in Python >= 2.5. NB In the degenerate case when an alias and an 
    unabridged command are identical, the alias takes priority. (In my best 
    Terminator voice: Don't do dat.) 
    """ 
    return sorted(set(d.keys()) | set(d.values())) 

@arg('cmd', choices=choices_for(CMD_ALIASES)) 
@arg('-r', '--randomize-order', default=False) 
@arg('-t', '--training-percent', default=0) 
def main(args): 
    args.command = CMD_ALIASES.get(args.cmd, args.cmd) 
    show(args, props=True) 

dispatch_command(main) 

이렇게하면 다소 일반화 된 앨리어싱 메커니즘 (주어진 명령에 대해 여러 별칭을 허용하는 메커니즘)이 설정됩니다. 결과로 얻는 args 개체는 실제로 주어진 명령에 대한 args.cmd 값과 지정된 별칭이있는 경우이를 확인하는 표준 args.command 값을 모두가집니다. 개별 기능에 명령을 파견하는 경우 명령 별칭을 할 argh에 내장 된 또 다른 메커니즘도있다

$ ./my_program.py dpd -r -t 80 
args: 
    cmd='dpd' 
    command='download-and-parse-data' 
    randomize_order=True 
    training_percent=80 

: 예를 들어

@aliases 장식이 here을 설명했다. 주의 :이 접근법은 최신 버전 argparse에 의존하므로 이전 Python 배포판/환경에서는 작동하지 않을 수 있습니다.