Como usar o ArgParse para analisar os parâmetros de scripts python
- 4799
- 1466
- Enrique Crist
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 desudo
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?