[Python] optparse 대신 argparse를 사용하는 이유는 무엇입니까?


Answers

파이썬 2.7 부터는 optparse 가 사용되지 않으며 장래에 없어 질 것입니다.

argparse 는 원래 페이지 ( https://code.google.com/archive/p/argparse/ )에 나열된 모든 이유로 더 좋습니다.

  • 위치 인수 다루기
  • 서브 커맨드 지원
  • +/
  • 0 개 이상 및 1 개 이상의 스타일 인수 처리
  • 보다 유익한 사용 메시지 생성
  • 사용자 정의 유형 및 조치에 대해 훨씬 간단한 인터페이스 제공

더 많은 정보는 argparse 가 표준 라이브러리에 넣은 수단 인 PEP 389 에도 있습니다.

Question

Python 2.7 문서에 또 다른 명령 행 구문 분석 모듈이 포함되어있는 것으로 나타났습니다. getoptoptparse 외에 argparse 있습니다.

왜 다른 커맨드 라인 파싱 모듈이 생성 되었습니까? optparse 대신 왜 사용해야합니까? 내가 알아야 할 새로운 기능이 있습니까?




블록에 새로운 아이들도 있습니다!

  • 이미 언급 된 depparated optparse 외에. [사용하지 마세요]
  • argparse 도 언급되었는데, 외부 libs를 포함시키지 않는 사람들을위한 솔루션이다.
  • docopt 는 당신의 입력을위한 파서 (parser)로서 문서화 문자열을 사용하는, 가치있는 외부 lib이다.
  • click 은 또한 외부 lib이고 인자를 정의하기 위해 데코레이터를 사용합니다. (나의 자료 추천 : Why Click )

깊이있는 비교가 필요하면이 부분을 읽어주십시오. 그러면 docopt 를 사용하거나 끝낼 수 있습니다. Kyle Purdon에게 감사드립니다!




optparse 대신 왜 사용해야합니까? 내가 알아야 할 새로운 기능이 있습니까?

@ 니콜라스의 대답은이 글을 잘 다루고 있다고 생각합니다.하지만 여러분이 시작하는 더 많은 "메타"질문은 아닙니다.

왜 다른 커맨드 라인 파싱 모듈이 생성 되었습니까?

어떤 유용한 모듈이 표준 라이브러리에 추가 될 때 딜레마 넘버 1입니다 : 동일한 기능을 제공하는 실질적으로 더 좋지만, 하위 호환되지 않는 방법이 등장 할 때 당신은 무엇을합니까?

(일반적으로 우리가 복잡한 패키지에 대해 이야기 할 때 : asyncore 대 twisted, tkinter 대 wx 또는 Qt, ...) 또는 똑같은 일을하는 여러 양립 불가능한 방법으로 끝납니다 (XML 파서 인 IMHO는 커맨드 라인 파서보다 훨씬 더 좋은 예다. 그러나 email 패키지와 비슷한 문제를 다루는 무수한 예전 방식은 너무 멀지 않다.

"폐기 된"오래된 방법에 대해 문서에서 위협적인 불평을 할 수도 있지만 큰 호환성이있는 중요한 응용 프로그램이 새로운 Python 릴리스로 이동하는 것을 막지 않으면 제거 할 수 없습니다.

(딜레마 2 번은 여러분의 질문과 직접적으로 관련이 없지만 "표준 라이브러리는 훌륭한 패키지가 죽는 곳"이라는 말에 요약되어 있습니다 ... 매년 1 년 반 정도되는 배포본은 그리 많지는 않지만, 매우 안정적이며 더 이상 릴리즈가 필요하지는 않지만 표준 라이브러리에서 "얼어 붙음"으로 인해 실제로 고통을받을 수 있습니다.하지만 실제로는 다른 문제입니다.)




처음에는 optparse에서 argparse로 전환하기 위해 @fmark만큼 꺼려했습니다. 이유는 다음과 같습니다.

  1. 그 차이가 그다지 크지 않다고 생각했습니다.
  2. 일부 VPS는 여전히 기본적으로 Python 2.6을 제공합니다.

그런 다음이 문서를 보았습니다. 특히 argparse는 optparse보다 성능이 뛰어났습니다. 특히 의미있는 도움말 메시지를 생성하는 것에 대해 말하면 다음과 같습니다. http://argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html

그리고 나서 @Nicholas 가 " argparse vs. optparse "를 보았습니다. 파이썬 2.7 이하에서 사용할 수있는 argparse를 사용할 수 있다고 말했습니다. (예, 그 전에는 몰랐습니다.)

이제는 두 가지 문제가 잘 처리됩니다. 나는 비슷한 마음가짐으로 다른 사람들을 도울 수 있기를 희망하면서이 편지를 썼다.