Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ffunenga

docopts

Recommended Posts

Virneto

Não queres deixar aí a tua opinião e trocar por miúdos? É que, (sem contar com o inglês do orador ou qualidade do vídeo/som), isto é muita areia para mim......ainda!! :(


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
ffunenga

Vou tentar deixar uma explicação daquilo que pude apurar até ao momento.

Quando lanças um programa pela linha de comandos, normalmente tens a opção de colocar argumentos de entrada para poder atalhar certas configurações (isto é pouco utilizado em Windows). Por exemplo: $ ./app.py --verbose -h www.google.pt -p 80

Na universidade, aprendi a desenrrascar este tipo de coisas ao analisar o argc,argv na linguagem C com um bloco gigante de ifs e elses... embora existam formas de tornar este processo mais simples, dá sempre algum trabalho.

Em Python, pelo contrário, existem duas abordagens para realizar esta análise de forma sistemática e simples: são os modulos optparse e argparse (principalmente o segundo). O workflow tipico é: criar um objecto Argparser, e depois utilizar os seus métodos para ir adicionando as opções e flags que estarão disponiveis na linha de comandos. No final, corres um metodo dessa instância para analisar o sys.argv e retornar um dicionário com os argumentos e seus valores.

Mesmo assim, a malta deste projecto (docopt) achou que ainda era possivel simplificar/melhorar este processo: crias uma string embutida no código com a tua mensagem de usage, e o modulo vai ser capaz de interpretar automaticamente o que lá escreveste de forma a fazer o parsing da linha de comandos como pretendes.

A vantagem é obvia: muito menos linhas no teu código para definires a mesma coisa. Além disso, pelo que percebi da explicação do orador sobre o a definição de um comando (o link [1] aponta directamente para o momento em que ele diz isso), é possivel fazeres coisas com este modulo que nenhum dos outros dois que eu já referi permitem. Tal como ele diz e bem, não tenho a certeza se conseguia implementar a definição que ele pretende com o argparse.

[1]

https://www.youtube.com/embed/pXhcPJK5cMc?start=605&feature=oembed

  • Vote 1

Share this post


Link to post
Share on other sites
eatg75

Na universidade, aprendi a desenrrascar este tipo de coisas ao analisar o argc,argv na linguagem C com um bloco gigante de ifs e elses... embora existam formas de tornar este processo mais simples, dá sempre algum trabalho.

Para o C ja existe o Gengetop ha muito temp! Que por acaso e muito interresante.

Gostei da abordagem do docopt para definir as opcoes, comandos, etc, ... O docopt para ser muito KISS (Keep It Simple Stupid)


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.