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


290

파이썬 2.7 문서에는 또 다른 명령 줄 파싱 모듈이 포함되어 있습니다. 또한에 getoptoptparse우리가 지금 가지고있는 argparse.

또 다른 명령 줄 구문 분석 모듈이 생성 된 이유는 무엇입니까? 왜 대신에 사용해야 optparse합니까? 알아야 할 새로운 기능이 있습니까?


8
또는 2012 년 이후 파이썬에는 docopt라는 인수 구문 분석을위한 쉽고 강력하고 멋진 모듈 이 있기 때문에 none을 사용할 수 있습니다 . docopt.org
ndemou

1
클릭하면 optparse 주위를 래퍼합니다.
Amit Tripathi

답변:


324

파이썬으로 2.7, optparse사용되지 않으며 희망 멀리 미래에 갈 것입니다.

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

  • 위치 인수 처리
  • 보조 명령 지원
  • 수 있도록 같은 대체 옵션 접두사 +/
  • 0 개 이상의 스타일 인수 처리
  • 보다 유익한 사용법 메시지 생성
  • 커스텀 타입과 액션을위한 훨씬 간단한 인터페이스 제공

자세한 정보는 PEP 389 에도 있으며 ,이 argparse라이브러리는 표준 라이브러리로 만든 차량 입니다.


18
커스텀 타입을위한 훨씬 간단한 인터페이스. 그러나 전체적으로 더 복잡한 인터페이스. drumroll getopt가 유지 되기 때문에 왜 optparse로 전환했는지 궁금 합니다. 그렇습니다, 그 공룡에게는 더 이상 사용되지 않습니다. esh
Jürgen A. Erhard

4
optparsePEP에서 "순도"에 대한 언급은 나중에 그것이 바위만큼 유연하게 코딩 된 것처럼 들리도록 (듯이) 추가하기가 얼마나 복잡한 지에 대한 주장입니다.
Nick T

1
부속 명령 인터페이스가 불량합니다. 기본 출력은 유용하지 않으며 변경하기가 어렵습니다.
anatoly techtonik

code.google.com은 며칠 내에 유지 보수를 진행합니다. 자세한 내용은 다음 사이트를 참조하십시오. argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
Jean-Francois T.

63

optparse 대신 왜 사용해야합니까? 내가 알아야 할 새로운 기능은 무엇입니까?

@Nicholas의 대답은 이것을 잘 다루고 있지만, 당신이 시작하는 더 많은 "메타"질문은 아닙니다.

왜 또 다른 명령 줄 구문 분석 모듈이 만들어 졌습니까?

이는 유용한 모듈이 표준 라이브러리에 추가 될 때의 딜레마입니다. 동일한 종류의 기능을 제공하기 위해 실질적으로 더 우수하지만 이전 버전과 호환되지 않는 방법이 등장 할 때 무엇을합니까?

오래되고 인정할만한 방법을 사용하거나 (일반적으로 복잡한 패키지에 대해 이야기 할 때 : asyncore vs twisted, tkinter vs wx 또는 Qt 등) 동일한 작업을 수행하는 여러 가지 호환되지 않는 방법으로 끝납니다 (XML 파서, IMHO는 명령 줄 파서보다 더 좋은 예입니다.하지만 email비슷한 문제를 처리하는 무수한 오래된 방법 과 패키지는 그리 멀지 않습니다.

문서에서 "더 이상 사용되지 않는"방법에 대해 협박 할 수도 있지만, 이전 버전과의 호환성을 유지해야하는 한, 중요한 응용 프로그램을 최신 Python 릴리스로 이동하지 않고 실제로 제거 할 수는 없습니다.

(질문과 직접 ​​관련이없는 딜레마 2 번은 "표준 라이브러리는 좋은 패키지가 죽는 곳입니다."라는 말에 요약되어 있습니다 ... 매년 반 정도 릴리스되면별로 그렇지 않은 패키지, 그보다 더 자주 릴리스가 필요 하지 않은 매우 안정된 표준 라이브러리에서 실제로 "동결"되어 실제로는 어려움을 겪을 수 있지만 실제로는 다른 문제입니다).


물론 2.7 이전의 파이썬 설치에 argparse.py를 포함시킬 수 있으며 이전 버전과 호환되지 않는 변경에 대해 걱정할 필요가 없습니다. 추적해야 할 추가 사항이지만 여전히 argparse.googlecode.com의 표준 라이브러리 외부에 유지됩니다.
Ehtesh Choudhury

2
Argparse는 일부 (틈새?) 용도에 대해서만 실질적으로 더 좋습니다. 그것은 그것의, 절대 정말 더 나은 아니라 다른 . optparse가 할 수없는 일을 할 수 있지만 회귀도 있습니다. 방금 마주한 한 가지 예 : optparse는 기본적으로 "-"를 처리했지만 (이 작업을 수행했는지 확실하지 않음) argparse는 아무것도 알지 못했습니다.
Jürgen A. Erhard

위의 주석에 늦은 사람은 누구나 argparse를 사용하여 접두사와 이름을 설정했으며 대부분의 파서는 다음과 같이 작성됩니다 parser.add_argument('--long-opt', '-l',...). '-'는 쉽게 처리 할 수 ​​있지만 원하는대로 사용할 수 있습니다.
SilverbackNet


18

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

  • 이미 언급 된 optparse 외에 . [사용하지 마세요]
  • argparse 도 언급되었는데, 이는 외부 라이브러리를 포함하지 않으려는 사람들을위한 솔루션입니다.
  • docopt 는 볼 가치가있는 외부 라이브러리이며, 문서 문자열을 입력 구문 분석기로 사용합니다.
  • click 은 또한 외부 라이브러리이며 인수를 정의하기 위해 데코레이터를 사용합니다. (내 소스 추천 : Why Click )
  • python-inquirer 선택 중심 도구 및 Inquirer.js ( repo ) 기반

좀 더 깊이있는 비교를해야하는 경우 읽어 보시기 바랍니다 당신이 사용하게 할 수 있습니다 docopt을 하거나 클릭 . Kyle Purdon에게 감사합니다!


4
이것은 가치있는 의견이지만, 여전히 답보다 더 많은 의견입니다. 기사의 유용한 요약으로 답변을 확장하여 실제 답변으로 만드십시오! : meta.stackexchange.com/a/8259/172394
Stefano

1
나는 내 링크의 요약을 포함하려고 노력했지만 지금은 좋은 stackoverflow 답변의 가치가 있기를 바랍니다.
lony

6

처음에는 @fmark만큼 optparse에서 argparse로 전환하는 것을 꺼려했습니다.

  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를 사용할 수 있다고 말합니다 (예전에는 몰랐습니다).

이제 내 두 가지 우려가 잘 해결되었습니다. 나는 비슷한 생각을 가진 다른 사람들을 도울 것이라고 기대했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.