Haciendo amistad entre Python y Bash: lanzamiento de las bibliotecas python-shell y smart-env v. 1.0.1

Buen día a todos!

29 febrero del año 2020 Se llevó a cabo el microlanzamiento oficial de bibliotecas. entorno inteligente и caparazón de pitón. Para aquellos que no lo saben, les sugiero que lo lean primero. Primer comentario.

En resumen, los cambios incluyen finalización de comandos, capacidades ampliadas para ejecutar comandos, algunas refactorizaciones y correcciones de errores.

Para obtener más información, consulte el gato.

¿Qué hay de nuevo en Python-Shell?

Empezaré de inmediato con el postre.

Finalización del comando

De acuerdo: ¿es conveniente que el editor/IDE/terminal le solicite el nombre del comando y, a veces, incluso los parámetros de llamada? Por lo tanto, python-shell está progresando gradualmente para proporcionar una funcionalidad similar. Debido al hecho de que los campos de la clase Shell bajo el capó no son de facto sus campos (el omnipresente __getattr__), el autocompletado también se creó desde cero (sobrecargando el método __dir__, respectivamente). Actualmente, el autocompletado funciona en entornos BPython e IPython. Por supuesto, me gustaría ver la integración con productos más venerables como PyCharm, y se están estudiando posibilidades de implementación en esta dirección.

Agregar propiedades

Como parte del lanzamiento, la clase Shell recibió una nueva propiedad last_command. La necesidad surgió porque cuando un comando con un código de retorno distinto de cero lanzaba una ShellException, el objeto Command no se devolvía desde la llamada __call__() al objeto de comando. Ahora existe la oportunidad de hacer esto:

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

La lista de propiedades del objeto Comando también se ha ampliado. Se agregó un campo de errores que devuelve la salida del comando al flujo de errores.

Ejecutar comandos con nombres de Python no válidos

Casi todos los sistemas tienen al menos un programa cuyo nombre no es adecuado como identificador en Python (por ejemplo, la conocida utilidad 2to3). Llámala con

Shell.2to3()

Si no funciona, el intérprete no lo dejará pasar.
La solución es llamar al comando de forma indirecta:

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

Vale la pena señalar que de la misma manera se pueden ejecutar comandos que sean válidos desde el punto de vista del intérprete, lo que deja la oportunidad de crear scripts flexibles como

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

Cambios menores

  • Se han implementado los métodos __repr__() y __str__() del objeto de clase Command, que ahora producen valores intuitivos (un comando con parámetros y su salida estándar, respectivamente).
  • Correcciones de código menores.
  • Agregar cobertura de pruebas, así como reorganizar las existentes.
  • Agregar las clases Subproceso y Proceso, cuyo propósito es crear un nivel adicional de abstracción al trabajar con el módulo de subproceso. Se necesita principalmente para eliminar la duplicación de código cuando se trabaja con Python 2/3, pero también puede proporcionar otras ventajas.

¿Qué hay de nuevo en el entorno inteligente?

A diferencia de Python-Shell, ha habido menos cambios en la biblioteca smart-env. La razón de esto es simple: falta de tiempo libre, durante el cual algunas mejoras potenciales (por ejemplo, el autocompletado de variables de entorno) se trasladaron a la siguiente versión.

De hecho, se han realizado los siguientes cambios en la biblioteca:

  • Correcciones de código menores.
  • Refactorización.
  • Reorganización y refinamiento de pruebas existentes.

Planes para próximos lanzamientos

biblioteca de shell de Python

  • Agregar soporte para llamadas de comandos sin bloqueo (paralelización de ejecución).

biblioteca de entorno inteligente

  • Implementación de autocompletado de variables de entorno en la clase ENV.
  • Soporte para el operador in para verificar la existencia de una variable env.
  • Implementación de soporte para las funciones str() y repr() para la clase ENV.

Las fechas de los próximos lanzamientos se anunciarán en los siguientes canales de comunicación:

Fuente: habr.com

Añadir un comentario