[python] 지정되지 않은 경우 argparse store false

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

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



답변

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


답변

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

달리는

% test.py

수확량

Namespace(auto=False)

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


답변

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


답변

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

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


답변