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

Bom dia a todos!

29 fevereiro 2020 anos ocorreu o micro-lançamento oficial de bibliotecas ambiente inteligente и python-shell. Para quem não sabe, sugiro que leia primeiro primeiro post.

Resumindo, as mudanças incluem conclusão de comandos, recursos expandidos para execução de comandos, algumas refatorações e correções de bugs.

Para obter detalhes, consulte gato.

O que há de novo no python-shell?

Vou começar imediatamente com a sobremesa.

Conclusão do comando

Concordo - é conveniente quando o editor/IDE/terminal solicita o nome do comando e, às vezes, até os parâmetros de chamada? Portanto, o python-shell está gradualmente progredindo no fornecimento de funcionalidades semelhantes. Devido ao fato de que os campos da classe Shell subjacentes não são de fato seus campos (o onipresente __getattr__), o preenchimento automático também foi criado do zero (sobrecarregando o método __dir__, respectivamente). O preenchimento automático atualmente funciona em ambientes BPython e IPython. Claro, eu gostaria de ver a integração com produtos mais veneráveis ​​como o PyCharm, e possibilidades de implementação estão sendo estudadas nessa direção.

Adicionando propriedades

Como parte do lançamento, a classe Shell recebeu uma nova propriedade last_command. A necessidade surgiu porque quando um ShellException foi lançado por um comando com um código de retorno diferente de zero, o objeto Command não foi retornado da chamada __call__() para o objeto de comando. Agora há uma oportunidade para fazer isso:

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

A lista de propriedades do objeto Command também foi expandida. Adicionado um campo de erros que retorna a saída do comando para o fluxo de erros.

Executando comandos com nomes Python inválidos

Quase todo sistema possui pelo menos um programa cujo nome não é adequado como identificador em Python (por exemplo, o conhecido utilitário 2to3). Ligue para ela com

Shell.2to3()

Se não funcionar, o intérprete não deixará passar.
A solução é chamar o comando de forma indireta:

Shell("2to3")  # возвращает объект команды

Vale ressaltar que da mesma forma você pode executar comandos válidos do ponto de vista do intérprete, o que deixa a oportunidade de criar scripts flexíveis como

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

Pequenas mudanças

  • Foram implementados os métodos __repr__() e __str__() do objeto da classe Command, que agora produzem valores intuitivos (um comando com parâmetros e sua saída stdout, respectivamente).
  • Pequenas correções de código.
  • Adicionar cobertura de testes, bem como reorganizar as existentes.
  • Adicionando as classes Subprocess e Process, cujo objetivo é criar um nível adicional de abstração ao trabalhar com o módulo subprocesso. Principalmente necessário para eliminar a duplicação de código ao trabalhar com Python 2/3, mas também pode fornecer outros bônus.

O que há de novo no ambiente inteligente?

Ao contrário do python-shell, houve menos alterações na biblioteca smart-env. A razão para isso é simples: falta de tempo livre, durante o qual algumas melhorias potenciais (por exemplo, preenchimento automático de variáveis ​​de ambiente) foram movidas para a próxima versão.

Na verdade, as seguintes alterações foram feitas na biblioteca:

  • Pequenas correções de código.
  • Reestruturação.
  • Reorganização e refinamento de testes existentes.

Planos para próximos lançamentos

biblioteca python-shell

  • Adicionando suporte para chamadas de comando sem bloqueio (paralelização de execução).

biblioteca de ambiente inteligente

  • Implementação de preenchimento automático de variáveis ​​de ambiente na classe ENV.
  • Suporte para o operador in para verificar a existência de uma variável env.
  • Implementação de suporte às funções str() e repr() para a classe ENV.

As datas dos próximos lançamentos serão divulgadas posteriormente nos seguintes canais de comunicação:

Fonte: habr.com

Adicionar um comentário