Migrando código optparse
para argparse
¶
O módulo argparse
oferece vários recursos de nível mais alto não fornecidos nativamente pelo módulo optparse
, incluindo:
Tratando argumentos posicionais.
Prover suporte a subcomandos.
Permitir prefixos alternativos de opções como
+
e/
.Manipular argumentos de estilo “zero ou mais” e “um ou mais”.
Produzir mensagens de uso mais informativas.
Fornecer uma interface muito mais simples para
type
eaction
personalizados.
Originalmente, o módulo argparse
tentou manter a compatibilidade com optparse
. No entanto, as diferenças fundamentais de design entre suportar o processamento de opções de linha de comando declarativas (enquanto deixa o processamento de argumentos posicionais para o código da aplicação) e suportar opções nomeadas e argumentos posicionais na interface declarativa significam que a API divergiu daquela de optparse
ao longo do tempo.
Conforme descrito em Escolhendo uma biblioteca de análise de linha de comando, as aplicações que atualmente usam optparse
e estão satisfeitos com a forma como ele funciona podem continuar usando optparse
.
Os desenvolvedores de aplicações que estão pensando em migrar também devem revisar a lista de diferenças comportamentais intrínsecas descritas nessa seção antes de decidir se a migração é desejável ou não.
Para aplicações que optam por migrar de optparse
para argparse
, as seguintes sugestões devem ser úteis:
Substituir todas as chamadas de
optparse.OptionParser.add_option()
por chamadas deArgumentParser.add_argument()
.Substituir
(options, args) = parser.parse_args()
porargs = parser.parse_args()
e adicionar chamadas adicionais aArgumentParser.add_argument()
para os argumentos posicionais. Tenha em mente que o que anteriormente era chamado deoptions
, agora no contexto doargparse
é chamado deargs
.Substituir
optparse.OptionParser.disable_interspersed_args()
usandoparse_intermixed_args()
em vez deparse_args()
.Substituir ações de função de retorno e argumentos nomeados
callback_*
por argumentostype
ouaction
.Substituir nomes de strings para argumentos nomeados
type
pelos objetos de tipo correspondentes (por exemplo, int, float, complex, etc).Substituir
optparse.Values
porNamespace
eoptparse.OptionError
eoptparse.OptionValueError
porArgumentError
.Substituir strings com argumentos implícitos tal como
%default
ou%prog
pela sintaxe padrão do Python para usar dicionários para formatar strings, ou seja,%(default)s
e%(prog)s
.Substituir o argumento
version
do construtor do OptionParser por uma chamada aparser.add_argument('--version', action='version', version='<the version>')
.