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 .
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_commandA 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 comandoVale 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:
- Atualização neste artigo.
Fonte: habr.com
