De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Parâmetros em scripts python de forma fácil

Colaboração: Islan Rocha

Data de Publicação: 15 de outubro de 2012

Você que já necessitou criar scripts que suportem um número razoável de parâmetros sabe o quanto é chato fazer as checagens iniciais pra evitar que a lógica do seu script caia por terra. Estou falando de checagens de quais parâmetros são obrigatórios, quais são opcionais, quais são parâmetros nomeados, etc.

Esta dica vai para os que, assim como eu, odeiam reinventar a roda.

Trata-se de um projeto fenomenal, chamado docopt.

Resumidamente, ele permite vc criar scripts que aceitem parâmetros no padrão POSIX de forma simples e clara.

O projeto inicial resolvia este problema para scripts em python por isso, acredito eu, o nome docopt (doc - opt). "doc", pois a docstring, definida no início do script, é transformada nas opções "opt" suportadas. Maravilhoso isso.

Pra exemplificar o que estou dizendo, segue um dos códigos de exemplo do próprio projeto e o resultado de uma execução com alguns parâmetros passados.

  #!/usr/bin/python
  """Naval Fate.
  
  Usage:
   naval_fate.py ship new < name>...
   naval_fate.py ship < name> move < x> < y> [--speed=< kn>]
   naval_fate.py ship shoot < x> < y>
   naval_fate.py mine (set|remove) < x> < y> [--moored|--drifting]
   naval_fate.py -h | --help
   naval_fate.py --version
  
  Options:
   -h --help     Show this screen.
   --version     Show version.
   --speed=< kn>  Speed in knots [default: 10].
   --moored      Moored (anchored) mine.
   --drifting    Drifting mine.
  """
  
  from docopt import docopt
  
  if __name__ == '__main__':
     arguments = docopt(__doc__, version='Naval Fate 2.0')
     print(arguments)

Resultado da execução deste código:

  islan@tsunami ~$ ./teste.py ship new teste
  {'--drifting': False,
  '--help': False,
  '--moored': False,
  '--speed': '10',
  '--version': False,
  '< name>': ['teste'],
  '< x>': None,
  '< y>': None,
  'mine': False,
  'move': False,
  'new': True,
  'remove': False,
  'set': False,
  'ship': True,
  'shoot': False}
  islan@tsunami ~$

Imaginaram como o restante das checagens e tratamentos ficam muito mais fáceis de se de fazer de posse de um dicionário com tudo já "parseado"?

Os amantes do bash não precisam ficar tristes, podem utilizar a versão criada como referência para a implementação em python. Neste momento há também versões para php, javascript, ruby.

Enjoy!

Islan Rocha é bacharel em Ciência da Computação, pós-graduado em Administração de Redes Linux pela Universidade Federal de Lavras. Usuário Linux e disseminador da cultura open source desde 2003. (http://islan.pro)

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Islan Rocha