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
typeeactionpersonalizados.
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 argumentostypeouaction.Substituir nomes de strings para argumentos nomeados
typepelos objetos de tipo correspondentes (por exemplo, int, float, complex, etc).Substituir
optparse.ValuesporNamespaceeoptparse.OptionErroreoptparse.OptionValueErrorporArgumentError.Substituir strings com argumentos implícitos tal como
%defaultou%progpela sintaxe padrão do Python para usar dicionários para formatar strings, ou seja,%(default)se%(prog)s.Substituir o argumento
versiondo construtor do OptionParser por uma chamada aparser.add_argument('--version', action='version', version='<the version>').