Unindo Python e Bash: lançamento das bibliotecas python-shell e smart-env v. 1.0.1

Boa tarde a todos!

29 de fevereiro de 2020 ocorreu o lançamento oficial de microbibliotecas smart-env e python-shell. Para quem não está por dentro, sugiro ler previamente o primeiro post.

Resumindo, as mudanças incluem o autocompletar comandos, ampliação das opções de execução de comandos, um pouco de refatoração e correções de bugs.

Para mais detalhes, veja abaixo.

O que há de novo no python-shell?

Vou começar direto pela parte interessante.

Autocompletar comandos

Concorda que é prático quando o editor/IDE/terminal sugere o nome do comando, e às vezes até os parâmetros de chamada? Assim, o python-shell está progredindo lentamente para oferecer essa funcionalidade. Como os campos da classe Shell, sob o capô, de fato não são seus campos (o onipresente __getattr__), o autocompletar foi criado do zero (sobrecarga do método __dir__). Neste momento, o autocompletar funciona nos ambientes BPython e IPython. Claro, gostaríamos de ver a integração com produtos mais estabelecidos como PyCharm, e estamos estudando as possibilidades de implementação nessa direção.

Adição de propriedades

Nesta versão, a classe Shell recebeu uma nova propriedade chamada last_command. A necessidade disso surgiu porque, ao gerar uma exceção ShellException com um comando que tenha um código de retorno diferente de zero, o objeto Command não era retornado da chamada __call__() do objeto de comando. Agora é possível fazer o seguinte:

try:
    command = Shell.touch('foo.txt')
except ShellException:
    command = Shell.last_command

A lista de propriedades do objeto Command também foi expandida. Um novo campo, errors, foi adicionado, que retorna a saída do comando para o fluxo de erros.

Executar comandos com nomes inválidos em Python

Quase em qualquer sistema, existe pelo menos um programa cujo nome não é adequado como identificador no Python (por exemplo, a conhecida utilidade 2to3). Chamá-lo usando

Shell.2to3()

não será possível — o interpretador não permitirá.
A solução é chamar o comando de forma alternativa:

Shell("2to3")  # retorna o objeto do comando

Vale a pena notar que dessa forma também é possível executar comandos válidos do ponto de vista do interpretador, o que permite a criação de scripts flexíveis como

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

Pequenas mudanças

  • Os métodos __repr__() e __str__() do objeto da classe Command foram implementados, agora retornando valores intuitivos (o comando com parâmetros e sua saída stdout, respectivamente).
  • Pequenas correções no código.
  • Adição de cobertura de testes, bem como reorganização dos existentes.
  • Adição das classes Subprocess e Process, cuja finalidade é criar um nível adicional de abstração ao trabalhar com o módulo subprocess. Principalmente necessário para eliminar repetições de código ao trabalhar com Python 2/3, mas também pode trazer outros benefícios.

O que há de novo no smart-env?

Ao contrário do python-shell, a biblioteca smart-env teve menos alterações. A razão é simples: falta de tempo livre, o que levou alguns possíveis aprimoramentos (como completar variáveis de ambiente automaticamente) a serem adiados para a próxima versão.

De fato, a biblioteca passou pelas seguintes alterações:

  • Pequenas correções no código.
  • Refatoração.
  • Reorganização e aprimoramento dos testes existentes.

Planos para futuras versões

Biblioteca python-shell

  • Adição de suporte a chamadas de comandos não bloqueantes (paralelização da execução).

Biblioteca smart-env

  • Implementação do recurso de autocompletar variáveis de ambiente na classe ENV.
  • Suporte ao operador in para verificar a existência de variáveis de ambiente.
  • Implementação do suporte às funções str() e repr() para a classe ENV.

Datas de lançamentos futuros serão anunciadas através dos seguintes canais de comunicação:

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster