인수가없는 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 뒤에 값을 기대합니다. 그냥 변수를 설정하여 스위치를 플립하고자하는 경우 TrueFalse, 한 번 봐 가지고 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.