Parâmetros em scripts python de forma fácil

Caso não consiga visualizar esta mensagem, clique aqui.
URL deste artigo: http://www.Dicas-L.com.br/dicas-l/20121015.php

Logotipo Dicas-L, por Ricardo Burile  

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)

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s