Petty little joy # 9: aplicativos de console com rosto humano

Os filósofos dizem que as pessoas precisam ser julgadas não pelo quão alto eles podem subir, mas pelo quão baixo eles podem cair.


Existem muitos desenvolvedores excelentes no mundo que podem produzir algoritmos espetaculares, arquiteturas elegantes e ótimos códigos. Mas esses mesmos programadores pegam e escrevem código organizado muito medíocre para algum pequeno script do console para calcular análises ou correção de dados no banco de dados. Nenhuma divisão em classes e funções, argumentos de passagem desajeitados, saída primitiva de informações obscuras usando print()


Hoje falaremos sobre como criar programas melhores que a maioria das pessoas não se importa - utilitários e scripts descartáveis ​​de console.


imagem


python-nubia


A biblioteca da segunda maior corporação de bens do mundo - o Facebook. Os engenheiros locais também estavam cansados ​​do caos nos aplicativos de console, então decidiram fornecer a eles uma interface interativa. Claro, textual.


imagem


  • Preenchimento automático para funções disponíveis no script do console.
  • Você pode conectar o preenchimento automático no nível do terminal (funciona no bash e no zsh).
  • Uma barra de status agradável e bonita que mostrará ao usuário o que está acontecendo.
  • Dicas e validações em conjuntos de argumentos de função e seus tipos.

Termgraph


Com a conclusão das informações no console, muitos geralmente têm problemas. Como afirmado acima, muitas vezes se resume à simples saída de print() . Ler isso, é claro, não é muito conveniente.


Para desenhar um desenho do que está acontecendo no programa, existe um termo gráfico


Permite tirar essas fotos no terminal



Ou tão mais complicado



Usando uma barra simples, você pode mostrar o progresso do programa na forma de uma faixa bonita - e isso será legal e muito mais agradável para imprimir valores incompreensíveis.


Tecido


Scripts para rodar em máquinas remotas são uma dor separada. Obviamente, vivemos na era do DevOps, quando montes de tarefas são resolvidos usando Salt e Ansible. Mas também acontece que você precisa efetuar login regularmente em um cluster de carrinhos de mão remotos e executar lotes de comandos lá. Para isso, há tecido


  • Suporte para diferentes listas de hosts - você pode executar comandos nos servidores de banco de dados, no cluster de aplicativos - basta escrever os carros remotos no script.
  • Políticas de autorização diferentes para carrinhos de mão - você pode usar chaves e senhas.
  • Divisão do script em subcomandos, agrupamento de subcomandos em equipes maiores - você pode criar uma estrutura lógica arbitrariamente complexa do código que deseja executar.
  • E, é claro, você também pode interferir no código de comando do terminal!

O Fabric é construído com base no Paramiko e, em geral, você pode executar comandos usando esta biblioteca de comunicação SSH de baixo nível. Mas o Fabric fornece o nível necessário de abstração, o que o torna claro e fácil de usar.


python-prompt-toolkit


Essa lib transforma um script simples em um aplicativo de console realmente poderoso.


Por exemplo, você pode adicionar uma linha de prompt de comando a uma interface de texto.


 from prompt_toolkit import prompt while 1: user_input = prompt('>') print(user_input) 

E depois disso, você pode adicionar o histórico dos comandos usados, assim como no seu terminal.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory while 1: user_input = prompt('>', history=FileHistory('history.txt'), ) print(user_input) 

E você pode fazer solicitações automáticas para linhas do histórico de entrada.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory while 1: user_input = prompt('>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), ) print(user_input) 

E ensine auto-prompts para certos comandos predefinidos.


 from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.contrib.completers import WordCompleter SQLCompleter = WordCompleter(['select', 'from', 'insert', 'update', 'delete', 'drop'], ignore_case=True) while 1: user_input = prompt('SQL>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), completer=SQLCompleter, ) print(user_input) 

O Liba é extremamente simples e permite criar sua própria interface legal e totalmente personalizável.


Por que isso?


A atenção a programas aparentemente únicos permitirá que você escreva não código para ejeção, mas ferramentas de console que podem ser facilmente reutilizadas posteriormente. Isso economiza tempo e, é claro, torna o trabalho com seus scripts muito mais agradável.

Source: https://habr.com/ru/post/pt463725/


All Articles