Notei que a documentação do Python 2.7 inclui mais um módulo de análise de linha de comando. Além getopt
e optparse
agora temos argparse
.
Por que outro módulo de análise de linha de comando foi criado? Por que devo usá-lo em vez de optparse
? Existem novos recursos que eu deveria conhecer?
Respostas:
A partir do python
2.7
,optparse
está obsoleta e esperamos que desapareça no futuro.argparse
é melhor por todos os motivos listados em sua página original ( https://code.google.com/archive/p/argparse/ ):+
e/
Mais informações também estão no PEP 389 , que é o veículo pelo qual
argparse
entrou na biblioteca padrão.fonte
optparse
no PEP argumenta mais tarde sobre o quão complexo é adicionar e parecer que foi codificado para ser tão flexível quanto o rock (mal).A resposta de @ Nicholas cobre isso bem, eu acho, mas não a pergunta mais "meta" que você começa:
Esse é o dilema número um quando qualquer módulo útil é adicionado à biblioteca padrão: o que você faz quando surge uma maneira substancialmente melhor, mas incompatível com versões anteriores, de fornecer o mesmo tipo de funcionalidade?
Ou você segue o caminho antigo e reconhecidamente superado (normalmente quando estamos falando de pacotes complicados: asyncore vs twisted, tkinter vs wx ou Qt, ...) ou você acaba com várias maneiras incompatíveis de fazer a mesma coisa (XML analisadores, IMHO, são um exemplo ainda melhor do que analisadores de linha de comando - mas o
email
pacote versus as inúmeras maneiras antigas de lidar com problemas semelhantes também não está muito longe ;-).Você pode fazer resmungos ameaçadores nos documentos sobre os modos antigos serem "descontinuados", mas (contanto que você precise manter a compatibilidade com versões anteriores), você realmente não pode tirá-los sem impedir que aplicativos grandes e importantes migrem para versões mais recentes do Python.
(O dilema número dois, não diretamente relacionado à sua pergunta, está resumido no velho ditado "a biblioteca padrão é onde bons pacotes morrem" ... com lançamentos a cada ano e meio, pacotes que não são muito, muito estável, sem precisar de lançamentos com mais frequência do que isso, pode sofrer bastante por ser "congelado" na biblioteca padrão ... mas isso é realmente uma questão diferente).
fonte
parser.add_argument('--long-opt', '-l',...)
; '-' é tratado com facilidade e da maneira que você quiser.A melhor fonte de justificativa para uma adição ao Python seria seu PEP: PEP 389: argparse - Novo módulo de análise de linha de comando , em particular a seção intitulada Por que o getopt e o optparse não são suficientes?
fonte
Há também crianças novas no quarteirão!
Se você precisar de uma comparação mais aprofundada, leia isso e poderá usar o docopt ou clicar em . Graças a Kyle Purdon!
fonte
No começo, fiquei tão relutante quanto o @fmark em mudar de optparse para argparse, porque:
Então eu vi esse documento, argparse supera o optparse, especialmente quando se trata de gerar mensagens de ajuda significativas: http://argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
E então vi " argparse vs. optparse " do @Nicholas, dizendo que podemos ter o argparse disponível em python <2.7 (Sim, eu não sabia disso antes).
Agora minhas duas preocupações estão bem abordadas. Escrevi isso esperando que ajude outras pessoas com uma mentalidade semelhante.
fonte