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

Bom Dia a todos!

Em 29 de fevereiro de 2020, foi realizada a micro-liberação oficial das bibliotecas smart-env e python-shell . Para quem não conhece, sugiro que você leia primeiro o primeiro post .

Em resumo, as alterações incluem a conclusão automática de comandos, expandindo a capacidade de executar comandos, um pouco de refatoração e correções de bugs.

Peço detalhes sob gato.

O que há de novo no python-shell?


Vou começar imediatamente com a sobremesa.

Conclusão da equipe


Concordo - é conveniente quando o editor / IDE / terminal solicita o nome do comando e, às vezes, chama parâmetros? Portanto, o python-shell está progredindo um pouco no fornecimento dessa funcionalidade. Como os campos da classe Shell, sob o capô de fato, não são seus campos (onipresente __getattr__), o preenchimento automático também foi criado do zero (sobrecarregando o método __dir__, respectivamente). O preenchimento automático está atualmente em execução nos ambientes BPython e IPython. Claro, quero ver a integração com produtos mais veneráveis ​​como o PyCharm, e nessa direção estamos explorando as possibilidades de implementação.

Adicionando propriedades


Como parte do lançamento, a classe Shell recebeu uma nova propriedade last_command. A necessidade disso surgiu devido ao fato de que quando uma ShellException era lançada por um comando com um código de retorno diferente de zero, o objeto Command não era retornado da chamada __call __ () do objeto de comando. Agora há uma oportunidade de fazer isso:

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

Também expandiu a lista de propriedades do objeto Command. Adicionado o campo de erros, que retorna a saída do comando para o fluxo de erros.

Executando comandos com nomes inválidos do Python


Quase qualquer sistema possui pelo menos um programa cujo nome não se encaixa como identificador no Python (por exemplo, o conhecido utilitário 2to3). Ligue para ela com

Shell.2to3()

falha - o intérprete não pula.
A solução é chamar o comando em uma solução alternativa:

Shell("2to3")  #   

Vale ressaltar que, da mesma maneira, é possível executar comandos válidos do ponto de vista do intérprete, o que permite criar scripts flexíveis como

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

Pequenas alterações


  • Os métodos __repr __ () e __str __ () do objeto Command são implementados, que agora produzem valores intuitivos (um comando com parâmetros e seu escape stdout, respectivamente).
  • Pequenas correções por código.
  • Adicionando cobertura de teste e reorganizando as existentes.
  • Incluindo as classes Subprocesso e Processo, cujo objetivo é criar um nível adicional de abstração ao trabalhar com o módulo de subprocesso. Na maioria das vezes, é necessário eliminar repetições de código ao trabalhar com o Python 2/3, mas isso pode potencialmente dar outros bônus.

O que há de novo no smart-env?


Ao contrário do python-shell, há menos alterações na biblioteca smart-env. A razão para isso é simples - falta de tempo livre, durante o qual algumas melhorias em potencial (por exemplo, a conclusão de variáveis ​​de ambiente) foram transferidas para o próximo release.

De fato, as seguintes alterações foram feitas na biblioteca:

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

Planos de lançamento seguinte


Biblioteca Python-shell


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

Biblioteca Smart-Env


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

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


All Articles