In [355]: config_args = {'my_argument': 'value from configuration file'}
In [356]: parser = argparse.ArgumentParser()
add_argument
는 생성하고 Action
개체를 반환합니다. 의 해당 개체에 대한 참조를 저장하고 그것을 살펴 보자 : 그 default
이 None
, store
의 기본 기본값임을
In [357]: a1 = parser.add_argument('--my-argument', dest='my_argument', required
...: =True)
In [358]: a1
Out[358]: _StoreAction(option_strings=['--my-argument'], dest='my_argument', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
알 수 있습니다. required
도 True
으로 설정됩니다. 또한 (subparsers 용 문서에 도시)의 인수에 나타나지 않는 dest
에 값을 설정하는 데 사용될 수
In [359]: parser.set_defaults(**config_args)
In [360]: a1
Out[360]: _StoreAction(option_strings=['--my-argument'], dest='my_argument', nargs=None, const=None, default='value from configuration file', type=None, choices=None, help=None, metavar=None)
set_defaults
:
set_defaults
는 a1.default
값을 변경한다.
인수없이 실행하면 조치가 필요하므로 오류가 발생합니다. 기본값이 있으면이 값이 무시됩니다. 우리 False
에 required
특성을 변경하는 경우
In [361]: parser.parse_args([])
usage: ipython3 [-h] --my-argument MY_ARGUMENT
ipython3: error: the following arguments are required: --my-argument
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
(a1
는 그 속성 범위 내에서 변경 될 수있다. 즉 a1.default
포함하는 객체이다).
In [362]: a1.required
Out[362]: True
In [363]: a1.required=False
In [364]: parser.parse_args([])
Out[364]: Namespace(my_argument='value from configuration file')
구성 값이 나타납니다. 명령 행 값은이를 겹쳐 쓸 수 있습니다.
In [365]: ns = argparse.Namespace(my_argument='foo')
In [366]: parser.parse_args([], namespace=ns)
Out[366]: Namespace(my_argument='foo')
이 foo
값은 우선 순위가 있기 때문에 액션 기본 또는 set_defaults
값이 사용되지 않습니다
또한 namespace
매개 변수의 기본값을 제공 할 수 있습니다.이 버그/문제에 argparse: does not respect required args pre-populated into namespace
https://bugs.python.org/issue29670
는 사용자가
required
시험을 대체 할
ns
에 값의 존재를 원했다. 즉, 그는이 값이 커맨드 라인에서 제공되고있는 것처럼 행동하기를 원합니다. 나의 결론은 변화하는 것이 쉽지 않다는 것이다. 현재
parse_args
구조는
required
과 같은 것들에 대한 수정이나 우회를 허용하지 않습니다.
더 나은 테스트를 원하면 default=None
을 그대로두고 구문 분석 후에 직접 테스트 해보십시오.
if args.my_argument is None:
args.my_argument = 'default from config'
'항상 값이 때문에 = TRUE '가 기본값으로 많은 이해가되지 않습니다 필요합니다. – jordanm
'parser.add_argument ('- required', default = "test")와 같은 각 인수에 기본값을 추가 할 수 있습니다. – Stack
'default = "some value"를 사용하면 별도의 파일. –