Facendo Python e Bash Friendship: Lanzamento das bibliotecas python-shell e smart-env v. 1.0.1

Bo día a todos!

Febreiro 29 2020 anos tivo lugar o micro-lanzamento oficial das bibliotecas intelixente-env и python-shell. Para aqueles que non estean ao tanto, recoméndolles que o lean primeiro primeiro post.

En resumo, os cambios inclúen completar comandos, capacidades ampliadas para executar comandos, refactorización e corrección de erros.

Para máis detalles ver cat.

Que hai de novo en python-shell?

Vou comezar de inmediato coa sobremesa.

Finalización do comando

De acordo: é conveniente cando o editor/IDE/terminal che solicite o nome do comando e, ás veces, mesmo os parámetros de chamada? Polo tanto, python-shell está progresando gradualmente para proporcionar unha funcionalidade similar. Debido ao feito de que os campos da clase Shell baixo o capó son de facto non os seus campos (o omnipresente __getattr__), o autocompletado tamén se creou desde cero (ao sobrecargar o método __dir__, respectivamente). O autocompletado funciona actualmente en ambientes BPython e IPython. Por suposto, gustaríame ver a integración con produtos máis venerables como PyCharm, e as posibilidades de implementación estanse estudando nesta dirección.

Engadindo propiedades

Como parte da versión, a clase Shell recibiu unha nova propiedade last_command. A necesidade xurdiu porque cando un comando lanzou unha excepción ShellException cun código de retorno distinto de cero, o obxecto Command non se devolveu desde a chamada __call__() ao obxecto comando. Agora hai unha oportunidade de facelo:

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

Tamén se ampliou a lista de propiedades do obxecto Command. Engadiuse un campo de erros que devolve a saída do comando ao fluxo de erros.

Execución de comandos con nomes de Python non válidos

Case todos os sistemas teñen polo menos un programa cuxo nome non é adecuado como identificador en Python (por exemplo, a coñecida utilidade 2to3). Chámaa con

Shell.2to3()

Se non funciona, o intérprete non o deixará pasar.
A solución é chamar ao comando dun xeito indirecto:

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

Cabe destacar que do mesmo xeito pode executar comandos válidos desde o punto de vista do intérprete, o que deixa a posibilidade de crear scripts flexibles como

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

Cambios menores

  • Implementáronse os métodos __repr__() e __str__() do obxecto da clase Command, que agora producen valores intuitivos (un comando con parámetros e a súa saída stdout, respectivamente).
  • Correccións de código menores.
  • Engadindo cobertura de proba, así como reorganizando as existentes.
  • Engadindo as clases Subprocess e Process, cuxo propósito é crear un nivel adicional de abstracción cando se traballa co módulo de subprocesos. Necesítase principalmente para eliminar a duplicación de código cando se traballa con Python 2/3, pero tamén pode proporcionar outros bonos.

Que hai de novo en smart-env?

A diferenza de python-shell, houbo menos cambios na biblioteca smart-env. A razón disto é simple: falta de tempo libre, durante o cal algunhas melloras potenciais (por exemplo, o autocompletado de variables de ambiente) foron trasladadas á seguinte versión.

De feito, realizáronse os seguintes cambios na biblioteca:

  • Correccións de código menores.
  • Refactorización.
  • Reorganización e perfeccionamento das probas existentes.

Plans para os próximos lanzamentos

biblioteca python-shell

  • Engadindo soporte para chamadas de comandos non bloqueantes (paralelización da execución).

biblioteca smart-env

  • Implantación do autocompletado de variables de ambiente na clase ENV.
  • Soporte para o operador in para comprobar a existencia dunha variable env.
  • Implementación do soporte para as funcións str() e repr() para a clase ENV.

As datas dos próximos lanzamentos anunciaranse ademais nas seguintes canles de comunicación:

Fonte: www.habr.com

Engadir un comentario