[PYTHON] argparse 및 python을 사용하여 사전을 인수로 허용 [duplicate]
PYTHONargparse 및 python을 사용하여 사전을 인수로 허용 [duplicate]
argpse와 함께 type = dict의 인수를 받아들이려고하지만 입력에 관계없이 잘못된 dict 값의 오류를 제공합니다.
#!/usr/bin/env python
import argparse
MYDICT = {'key': 'value'}
parser = argparse.ArgumentParser()
parser.add_argument("-m", "--mydict", action="store",
required=False, type=dict,
default=MYDICT)
args = parser.parse_args()
print args.mydict
사전을 스크립트에 전달하려고 할 때 일어나는 일입니다.
./argp.py -m "{'key1': 'value1'}"
usage: argp.py [-h] [-m MYDICT]
argp.py: error: argument -m/--mydict: invalid dict value: "{'key1': 'value1'}"
문서를 보면 이것이 가능할 것이라고 생각합니다.
http://docs.python.org/dev/library/argparse.html
"in 연산자를 지원하는 모든 객체를 선택 값으로 전달할 수 있으므로 dict 객체, set 객체, 사용자 정의 컨테이너 등이 모두 지원됩니다."
해결법
-
==============================
1.문자열에서 dict (EDIT : 해킹이 가능합니다. 아래 참조)의 변환 함수가 없기 때문에 명령 줄에서 인수를 인수로 전달할 수 있다고 생각하지 않습니다. 근본적으로 파이썬에게 다음과 같이 말합니다 :
문자열에서 dict (EDIT : 해킹이 가능합니다. 아래 참조)의 변환 함수가 없기 때문에 명령 줄에서 인수를 인수로 전달할 수 있다고 생각하지 않습니다. 근본적으로 파이썬에게 다음과 같이 말합니다 :
dict("{'key1': 'value1'}")
파이썬 콘솔에서 해보면 작동하지 않습니다.
무슨 구절 :
"in 연산자를 지원하는 모든 객체를 선택 값으로 전달할 수 있으므로 dict 객체, set 객체, 사용자 정의 컨테이너 등이 모두 지원됩니다."
는 add_argument 함수와 함께 전달 될 수있는 choices 인수이며 type 인수는 아닙니다.
최선의 방법은 아마도 인수로 문자열을 받아 들인 다음 파이썬의 json 기능을 사용하여 변환하는 것입니다.
parser.add_argument('-m', '--my-dict', type=str) args = parser.parse_args() import json my_dictionary = json.loads(args.my_dict)
그런 다음 사전을 문자열 형식으로 전달할 수 있습니다. 파이썬 콘솔에서 json 인코더 / 디코더를 직접 사용해보십시오.
>>>json.loads('{"value1":"key1"}') {u'value1': u'key1'}
편집 : hpaulj 당신이 그것을 "json.loads 전달하여 형식 매개 변수를"해킹 할 수 지적했다.
import json parser.add_argument('-d', '--my-dict', type=json.loads) args = parse.parse_args() mydict = args.my_dict # Will return a dictionary
내부적으로 argparse가 인수를 변환하는 함수로 매개 변수 값을 사용하기 때문에 이것이 실제로 작동하는 이유는 실제로 매우 흥미 롭습니다. type = int 인 경우 int (arg)를 사용하거나 type = json.loads이면 json.loads (arg)
즉, 단일 매개 변수를 인자로 취하는 모든 함수를 전달하여 필요할 경우 사용자 정의 변환을 수행 할 수 있습니다.
from https://stackoverflow.com/questions/18608812/accepting-a-dictionary-as-an-argument-with-argparse-and-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] pandas.ExcelWriter를 사용하여 Excel 열 너비를 자동으로 조정하는 방법이 있습니까? (0) | 2018.11.06 |
---|---|
[PYTHON] Python에서 안전하지 않은 사용자 입력으로부터 수학 방정식을 평가하십시오. (0) | 2018.11.06 |
[PYTHON] 현재 시간이 Python의 datetime 모듈을 사용하여 지정된 범위 내에 있는지 어떻게 알 수 있습니까? (0) | 2018.11.06 |
[PYTHON] 16 진수를 16 진수로 변환하는 방법 (0) | 2018.11.06 |
[PYTHON] virtualenv Env는 Windows 7에서 bin 디렉토리를 만들지 않습니다. (0) | 2018.11.06 |