지정되지 않은 경우 argparse store false


104
parser.add_argument('-auto', action='store_true')

-auto지정되지 않은 경우 거짓을 어떻게 저장할 수 있습니까? 이 방법으로 지정하지 않으면 None을 저장한다는 것을 희미하게 기억할 수 있습니다.

답변:


171

store_true옵션은 기본값 False를 자동으로 만듭니다 .

마찬가지로 명령 줄 인수가없는 경우 store_false기본값은 True 입니다.

이 동작의 소스는 간결하고 명확합니다. http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861

argparse 문서는 주제에 대해 명확하지 않으므로 지금 업데이트하겠습니다. http://hg.python.org/cpython/rev/49677cc6d83a


2
이것에 대한 몇 가지 의견. 첫째, 옵션이 -bar이면 hg.python.org/cpython/rev/49677cc6d83a 기반 dest으로 자동으로 설정됩니다 . 그러나 코드에서이 기본 동작이 어디에 설정되어 있는지 알 수 없습니다. 나는 항상 명시 적으로 인수를 설정했습니다 . 또한, 나는시키는 생각 받는 기본 위한 경우 정말 이해가되지 않는 옵션 입니다 . 는 안 될 이 경우에는? bardestbardest--bar--barstore_falsedestnotbar
Faheem Mitha 2013-06-20

4
나는 반대의 명명 규칙을 이해하지 못했습니다.
brainLoop

동의합니다. 이것은 약간 혼란 스럽습니다. 어쨌든 'store_false'또는 'store_true'는 기본값이 아닌 작업으로 지정됩니다. 따라서이 인수를 프로그램에 추가하면 지정된 작업이 트리거됩니다.
ady

15

import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)

달리는

% test.py

수확량

Namespace(auto=False)

따라서 False기본적 으로 저장 되는 것으로 보입니다 .


3

Raymond Hettinger는 이미 OP의 질문에 대답합니다.

그러나 우리 그룹은 "store_false"를 사용하여 가독성 문제를 경험했습니다. 특히 새로운 회원이 우리 그룹에 가입 할 때. 사용자가 인수를 지정하면 해당 인수에 해당하는 값이 True 또는 1이된다는 것이 가장 직관적 인 생각이기 때문입니다.

예를 들어, 코드가-

parser.add_argument('--stop_logging', action='store_false')

코드 판독기는 stop_logging의 값이 true 일 때 로깅 문이 꺼져있을 것으로 예상 할 수 있습니다. 그러나 다음과 같은 코드 는 원하는 동작 의 반대로 이어질 것 입니다.

if not stop_logging:
    #log

반면에 인터페이스가 다음과 같이 정의되면 "if-statement"가 작동하고 더 직관적으로 읽을 수 있습니다.

parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
    #log

7
가독성을 향상시킬 대상 별칭을 설정할 수 있습니다 parser.add_argument('--stop_logging', action='store_false', dest='use_logging')..
Krassi

-4

store_false는 실제로 기본적으로 기본값 0으로 설정됩니다 (테스트하여 확인할 수 있음). 기본값을 변경하려면 default=True선언에 추가 하십시오.

따라서이 경우 : parser.add_argument('-auto', action='store_true', default=True)


이것은 Python 2.7 및 3.4에서는 해당되지 않는 것 같습니다. >>> parser.add_argument('--bar', action='store_false') _StoreFalseAction(option_strings=['--bar'], dest='bar', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None) >>> parser.parse_args([]) Namespace(bar=True)
Leynos

2
죄송합니다. 실제로 optparse의 기본 동작입니다. argparse는 기본적으로 저장소의 역으로 ​​설정되어야합니다. 즉, 'store_false'의 기본값은 'True'입니다.
Unix-Ninja
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.