인수가없는 Python Argparse 명령 행 플래그


345

명령 행 인수에 옵션 플래그를 어떻게 추가합니까?

예. 그래서 쓸 수 있습니다

python myprog.py 

또는

python myprog.py -w

나는 시도했다

parser.add_argument('-w')

하지만 오류 메시지가 나타납니다.

Usage [-w W]
error: argument -w: expected one argument

내가 취하는 것은 -w 옵션에 인수 값을 원한다는 것을 의미합니다. 깃발을 받아들이는 방법은 무엇입니까?

이 질문에 대해 http://docs.python.org/library/argparse.html 이 불투명 하다는 것을 알았습니다 .


4
스크립트에 1 플래그를 원하면 sys.argv가 훨씬 쉽습니다. 당신이 특별히 argparse를 배우려고하지 않는 한, 그것은 편리한 모듈을 알고 있기 때문에 좋습니다.
— chown

2
대답을 알고 난 후에도 문서에서 어떻게 대답했는지 이해할 수 없습니다.
— Andreas Haferburg

답변:


533

당신이 그것을 가지고 있듯이, 인수 w는 명령 줄에서 -w 뒤에 값을 기대합니다. 그냥 변수를 설정하여 스위치를 플립하고자하는 경우 True나 False, 한 번 봐 가지고 http://docs.python.org/dev/library/argparse.html#action (특히 store_true 및 store_false를)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

여기서 action='store_true'의미합니다 default=False.

반대로, 당신은 할 수 action='store_false'의미있는 default=True.


3
@Jdog, 왜 이것이 효과가 없는지 아십니까? 은 w항상 False.
— Iulian Onofrei

52

실행할 준비가되도록 빠른 스 니펫 추가 :

출처 : myparser.py

import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')

args = parser.parse_args()
print args.w

용법:

python myparser.py -w
>> True

-10

다음과 같은 빠른 방법이 있습니다 sys. .. 이외의 기능은 필요하지 않습니다 .

flag = "--flag" in sys.argv[1:]

[1:] 전체 파일 이름이 --flag


13
BAD가 장기적으로 생각하는 아이디어를 표현하기 위해 단순히 로그인했습니다. 문자열 "--flag"가 sys.argv에 있는지 확인하여 시작한다고 상상해보십시오. 그런 다음 sys.argv [-1]의 끝을보고 어떤 파일을 열 것인지 확인하십시오. 갑자기라는 이름의 파일을 열려고하면 --flag예상치 못한 동작이 발생하고 더 나쁜 것은 신뢰할 수없는 데이터가 종료 될 때 종종 보안 결함이 발생한다는 것입니다. argv로 전달되었습니다. 결국이 방법은 수행하지 않아야합니다. 실제 인수 파서는 훨씬 더 강력합니다 ...
— timthelion

3
언급 한 바와 같이,이 솔루션은 전혀 강력하지는 않지만 테스트를 위해 신속하게 수행해야하는 경우에 효과적입니다. 프로덕션 코드와 거리를 두십시오.
— Jonathan Sudiaman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.