2016-11-18 1 views
3

equals (=) 부호를 사용하지 않고 argparse를 사용하여 파이썬 프로그램에 값으로 --을 전달하는 방법이 있습니까? 파이썬 argparse - 값으로

나는 argparser에 추가 된 명령 행 인수

은 다음과 같이 정의된다 :

parser.add_argument('--myarg', help="my arg description") 

당신은이 같은 프로그램에이 인수를 사용합니다 :

python myprogram.py --myarg value123 

실행하는 방법이 있나요 이 프로그램은 - 'value123'대신에 - 값으로?

python myprogram.py --myarg -- 
+0

조치가'store_true' 인 경우 옵션에 * 인수가 사용되지 않습니다. – chepner

+0

등호가 있더라도'--myarg = -'는'--myarg -'와 똑같이 취급됩니다. – chepner

+0

네임 스페이스 (myarg = [])를 생성합니다. 파서를 혼란스럽게합니다. '--'를 디바이더로 사용하고,'argparse' 나 사용자를 혼동시키지 마십시오. 왜이 문자열을 인수로 취급해야합니까? – hpaulj

답변

3

가 나는 argparse는 기본적으로이 작업을 수행 할 수 있도록 할 수 없습니다 생각한다. 비 침입 해결 방법으로 sys.argv을 사전 처리 할 수 ​​있습니다.

import sys 
from argparse import ArgumentParser 
from uuid import uuid4 

sentinel = uuid4().hex 

def preprocess(argv): 
    return [sentinel if arg == '--' else arg for arg in argv[1:]] 

def postprocess(arg): 
    return '--' if arg == sentinel else arg 

parser = ArgumentParser() 
parser.add_argument('--myarg', help="my arg description", type=postprocess) 
args = parser.parse_args(preprocess(sys.argv)) 
+0

코드에서 네임 스페이스 (myarg = [])'를 얻을 수 있습니다. – hpaulj

+0

그건 좀 중요한 점입니다. 'my'는'--'를 전달하는 것 외에는 얻을 수 없습니다. 파이썬 측면에서, 당신이 지금 원하는 것을'myarg'로 할 수 있습니다 ... – wim

+0

'myarg = []'는'nargs = '*''Action을 기대합니다. 기본 nargs가 아닙니다. – hpaulj