Como usar o ArgParse para analisar os parâmetros de scripts python

Como usar o ArgParse para analisar os parâmetros de scripts python

Objetivo

Aprenda a usar o módulo Argparse para analisar facilmente parâmetros de scripts python

Requisitos

  • Conhecimento básico de conceitos de Python e Objetos

Dificuldade

FÁCIL

Convenções

  • # - requer que os comandos Linux sejam executados com privilégios de raiz também
    diretamente como usuário root ou por uso de sudo comando
  • $ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Introdução

Em um artigo anterior, vimos como analisar os argumentos da linha de comando usando getopts no contexto de scripts de bash (você pode encontrar o artigo aqui). Agora veremos como realizar a mesma tarefa, de uma maneira mais poderosa, ao escrever um script python.

Inicialize o analisador

Para atingir nosso objetivo, vamos usar um módulo Python chamado argparse. Ele nos permitirá especificar nossos parâmetros da linha de comando e gerará automaticamente a mensagem de ajuda do script com base neles. Então, vamos começar, chamaremos nosso script de "impressorscripts.py ”:

#!/usr/bin/Env python importar argparse se __name__ == '__main__': # Inicialize o analisador do analisador = argparse.ArgumentParser (Description = "Script simples para demonstrar o uso do ArgParse")
cópia de

A primeira coisa a fazer é, obviamente, importar o argparse módulo. Depois disso, continuamos a inicializar o analisador. O descrição A palavra -chave, passada para o construtor de analisador é opcional, mas nos permite adicionar uma breve descrição do script quando a mensagem de ajuda é exibida.

Existem outras palavras -chave que podemos usar para personalizar ainda mais o comportamento do analisador: por exemplo, fornecendo o Epilog Palavra -chave, podemos fornecer um texto a ser exibido após a principal mensagem de ajuda ou usando prog Podemos especificar o nome do programa a ser exibido no mesmo contexto (por padrão SYS.argv [0] é usado).



Adicionando um parâmetro posicional

Agora é hora de adicionar nosso primeiro parâmetro posicional ao script. Nesse caso, adicionaremos o parâmetro "PrintMe", essa é a string que será impressa pelo nosso script de teste. Nós realizamos isso usando o add_argument () Método do objeto de analisador que inicializamos acima:

analisador.add_argument ('printme', help = "a string a ser impressa")

O primeiro argumento que fornecemos ao método é o nome do parâmetro, e o segundo, opcional, é ajuda. Usando essa palavra -chave, podemos especificar a descrição para o parâmetro que será exibido na mensagem de ajuda gerada por argparse.

É importante observar que, por padrão, os parâmetros serão considerados strings: para especificar outro tipo de dados, devemos usar o tipo palavra -chave. Por exemplo, se quiséssemos que nosso argumento fosse convertido em um número inteiro, teríamos especificado da seguinte maneira:

analisador.add_argument ('printme', tipo = int)

Depois que adicionamos nosso parâmetro, devemos invocar o parse_args () Método do objeto de pastor. Este método retornará uma instância do argparse.Espaço para nome Classe: Os parâmetros analisados ​​serão armazenados como atributos desta instância. Finalmente podemos adicionar uma linha para imprimir a variável. Neste ponto, o script deve olhar desta maneira:

#!/usr/bin/Env python importar argparse se __name__ == '__main__': # Inicialize o analisador do analisador = argparse.ArgumentParser (Description = "Script simples para demonstrar o uso do ArgParse") # Adicione o analisador de parâmetros posicionais.add_argument ('printMe', help = "a string a ser impressa") # analisar os argumentos argumentos = analisador.parse_args () # finalmente imprima a impressão de string passada (argumentos.printme)
cópia de

Vamos executá -lo:

$ ./Printerscript.py "Hello World!" Olá Mundo! 

A corda que passamos foi impressa que esperava. Mas e se não o fornecemos? A mensagem de ajuda teria sido mostrada, descrevendo o uso correto do script:

$ ./Printerscript.Uso do PY: impressorscripts.PY [-H] PrintsScript PrintMe.PY: Erro: muito poucos argumentos 


Adicionando um parâmetro opcional

Parâmetros opcionais não são obrigatórios para o uso do script, mas eles são usados ​​para modificar seu comportamento. Argparse os reconhece quando vê que os hífens são fornecidos na descrição, por exemplo:

analisador.add_argument ('-r', '--prepeat', help = "Número de vezes para imprimir a string", tipo = int, padrão = 1)
cópia de

O nome do parâmetro é prefixado com hífens (podemos especificar a versão curta e a longa parâmetro). Nesse caso, adicionamos o parâmetro opcional --repita que especifica quantas vezes a string deve ser impressa. Nós também usamos o padrão palavra -chave. Isso é realmente importante, porque através disso, podemos especificar o valor que o atributo assumirá se o parâmetro não for explicitamente fornecido ao chamar o script.

Nesse ponto, para verificar se o parâmetro funciona conforme o esperado, tudo o que precisamos fazer é modificar nosso script para repetir a impressão da string para o número especificado de vezes, portanto, anexamos o imprimir() Funcionar um pouco para loop:

para i em alcance (0, argumentos.Repita): Imprimir (argumentos.printme) 
cópia de

Vamos tentar:

$ ./Printerscript.py -repeat = 3 "Hello World!" Olá Mundo! Olá Mundo! Olá Mundo! 

Tudo foi como esperado. Além disso, a mensagem de ajuda também foi atualizada e agora inclui uma descrição do novo parâmetro opcional:

./Printerscript.PY -Uso de Help: Printerscript.Py [-h] [-r Repeat] PrintMe Script simples para demonstrar Argparse Uso Argumentos posicionais: impressão a string a ser impressa argumentos opcionais: -h, --Help Mostra esta mensagem de ajuda e saída -r Repita, -Repetir Número de repetição de vezes para imprimir a corda 

Como dito acima, quando argparse vê que um parâmetro é prefixado com hífens, assume que é opcional. Para modificar esse comportamento e "declará -lo" como obrigatório, podemos usar o obrigatório palavra -chave ao adicionar o parâmetro, no formulário: requerido = true.

A palavra -chave "dest"

Normalmente, o valor previsto para um parâmetro será armazenado como um atributo nomeado após o primeiro argumento dado ao add_argument () Método no caso de parâmetros posicionais, ou a primeira opção de sequência longa (com os hífens removidos: a sequência -prepeat se tornará o atributo 'repetição') no caso de parâmetros opcionais. Neste último caso, se uma opção de string longa não estiver disponível, a curta será usada. O dest A palavra -chave nos permite especificar um nome de atributo personalizado em vez de confiar nesse comportamento.



A palavra -chave "ação"

Ao usar o add_argument () Método, podemos especificar o comportamento a ser usado para as opções analisadas usando outra palavra -chave: Ação. A ação padrão é atribuir o valor aprovado ao atributo correspondente. No caso de nosso pequeno script, por exemplo, o valor previsto para o --repita parâmetro, será atribuído ao atributo 'repetição' do argparse.Espaço para nome classe depois que os argumentos são analisados. Este comportamento, no entanto, também pode ser modificado. Vamos descrever as outras opções principais em breve:

store_true e store_false

Ao especificar esta ação, estamos basicamente dizendo que o parâmetro não requer um argumento: Verdadeiro será atribuído como o valor ao atributo correspondente se a opção for fornecida, ou Falso de outra forma. store_true e store_false fornecerá respectivamente um valor padrão de Verdadeiro e Falso.

store_const

Isso é semelhante à opção acima, mas usando -a como um valor para o Ação palavra -chave, em vez de um booleano, um constante o valor será atribuído ao atributo se o parâmetro for usado. Este valor é especificado usando o const Palavra -chave:

analisador.add_argument ("-opção aleatória", action = "store_const", const = yourvalue)
acrescentar

Se acrescentar é usado como valor do Ação palavra -chave, uma lista será criada e referenciada pelo atributo de parâmetro correspondente: o valor fornecido será anexado a ele. Isso é útil caso o parâmetro seja fornecido mais de uma vez:

analisador.add_argument ('-opção aleatória', action = "Append")
Append_Const

Assim como quando estiver usando acrescentar, Um valor será anexado à lista referenciada pelo atributo de parâmetro. A diferença é que, neste caso, o valor não é fornecido pelo usuário, mas declarado ao adicionar o parâmetro, novamente, através do const Palavra -chave:

analisador.add_argument ('--randomoption', Action = "Append_Const", const = "o valor a anexar")
cópia de

Parâmetros opcionais mutuamente exclusivos

Em certa situação, podemos precisar fazer algumas opções mutuamente exclusivas. O argparse O módulo permite realizar esta tarefa de uma maneira fácil. Basicamente, o que vamos fazer é criar um grupo separado de opções usando o add_mutualmente_exclusive_group () método do objeto de analisador e adicione nossos argumentos a ele. Por exemplo:

analisador = argparse.ArgumentParser (); # Crie nosso grupo de argumentos mutuamente exclusivos mutuamente_exclusive = analiser.add_mutualmente_exclusive_group () mutuamente_exclusive.add_argument ("-foo", help = "foo exclui bar") mutuamente_exclusive.add_argument ("-bar", help = "bar exclui foo")
cópia de

Uma coisa a perceber é que fazer parte de um Mutualmente_exclusive_group Os argumentos devem ser opcionais, portanto, argumentos posicionais ou argumentos definidos conforme necessário (requerido = true) não são permitidos nele.

Neste ponto, você deve ter uma idéia de como argparse funciona. No entanto, apenas arranhamos a superfície do que este módulo tem a oferecer: para uma descrição completa de todas as suas funcionalidades, vá em frente e leia a documentação, você não se arrependerá. Bom script!

Tutoriais do Linux relacionados:

  • Bash Script: sinaliza o uso com exemplos de argumentos
  • Coisas para instalar no Ubuntu 20.04
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Comandos básicos do Linux
  • Como construir um aplicativo Tknter usando um objeto orientado…
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Mastering Bash Script Loops
  • Como imprimir a árvore do diretório usando o Linux
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?