2010-07-28 4 views
1

임의의 명령 줄 인수를 허용하려고합니다. 사용자가이파이썬에서 임의의 명령 줄 인수

myscript.py --a valueofa --b valueofb posarg1 posarg2

내가 abvalueofb와 함께 전달, valueofa와 함께 전달 된 것을 알처럼 보이는 명령 줄 것을 나에게 제공하는 경우 나는 마지막 두 위치 인수가 있습니다.

필자는 언제나 optparse를 사용했습니다. 정확히 optparse를 사용 했으므로 정확히 어떤 인수를 찾을 지 지정합니다. 그러나 사용자가 명령 줄에서 임의의 "매크로"를 정의 할 수 있기를 바랍니다. 확실히 내가 쓰는 것보다 더 우아하게 그것을하는 파이썬 모듈이있다. 뭐야?

+1

.... "매크로"? –

+0

필자가 생각한 유추는'-Dthismacro = macrovalue'와 같은 gcc를 사용하는 것입니다. –

답변

2

슬프게도, 당신은 can't입니다. 이 옵션을 지원해야하는 경우 자체 옵션을 작성해야합니다. = (.

0

argparse 원하는대로 할 수 있습니까? 최근에 표준 라이브러리에 추가되었습니다. 특히 this section 문서

+1

"사용자가 명확하게 실수를했을 때마다 parse_args 메서드가 오류를 발생 시키려고 시도합니다."는 정의되지 않은 인수가 오류를 발생시킬 수 있음을 의미합니다. 사실, 이것은 의도적 인 행동이라고 생각합니다. 예를 들어, 맞춤법 오류. – katrielalex

0

arbitrary_args.py :.

#!/usr/bin/env python3 

import sys 


def parse_args_any(args): 
    pos = [] 
    named = {} 
    key = None 
    for arg in args: 
     if key: 
      if arg.startswith('--'): 
       named[key] = True 
       key = arg[2:] 
      else: 
       named[key] = arg 
       key = None 
     elif arg.startswith('--'): 
      key = arg[2:] 
     else: 
      pos.append(arg) 
    if key: 
     named[key] = True 
    return (pos, named) 


def main(argv): 
    print(parse_args_any(argv)) 


if __name__ == '__main__': 
    sys.exit(main(sys.argv[1:])) 

$./arbitrary_args.py cmd posarg1 posarg2 --foo --bar baz posarg3 --quux :

([ 'cmd'를 'posarg1', 'posarg2', 'POS 에서 arg3 ', {'foo는 ': 사실,'바 ':'바즈 ','quux 'TRUE})

argparse_arbitrary.py :

#!/usr/bin/env python3 
import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('-D', action='append',) 
D = {L[0]:L[1] for L in [s.split('=') for s in parser.parse_args().D]} 
print(D) 

$./argparse_arbitrary.py -Ddrink=coffee -Dsnack=peanut

를 {' 스낵 ':'땅콩 ','음료 ':'커피 '}