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

¡Buen día a todos!

29 de febrero de 2020 se llevó a cabo el lanzamiento oficial de las bibliotecas smart-env y python-shell. Para aquellos que no están al tanto, les sugiero leer primero la primera publicación.

En resumen, entre los cambios se incluyen la autocompletación de comandos, la ampliación de las capacidades para ejecutar comandos, algo de refactorización y correcciones de errores.

Para más detalles, por favor sigan leyendo.

¿Qué hay de nuevo en python-shell?

Comenzaré directamente con el postre.

Autocompletación de comandos

¿No es conveniente cuando el editor/IDE/terminal sugiere el nombre del comando y a veces también los parámetros de llamada? Pues python-shell avanza poco a poco en proporcionar dicha funcionalidad. Dado que los campos de la clase Shell bajo el capó de facto no son sus campos (el omnipresente __getattr__), la autocompletación se creó también desde cero (sobrecargando, por tanto, el método __dir__). Actualmente, la autocompletación funciona en los entornos de BPython e IPython. Claro, me gustaría ver la integración con productos más establecidos como PyCharm, y en esa dirección se están estudiando las posibilidades de implementación.

Añadir propiedades

En el marco de esta versión, la clase Shell ha recibido una nueva propiedad llamada last_command. La necesidad de esta surgió porque, al generar una excepción ShellException con un código de retorno distinto de cero, el objeto Command no se devolvía desde la llamada __call__() del objeto de comando. Ahora es posible hacer lo siguiente:

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

Además, se ha ampliado la lista de propiedades del objeto Command. Se ha añadido el campo errors, que devuelve la salida del comando en el flujo de errores.

Ejecutar comandos con nombres no válidos para Python

Prácticamente en cualquier sistema hay al menos un programa cuyo nombre no sirve como identificador en Python (por ejemplo, la conocida utilidad 2to3). No se puede invoque a través de

Shell.2to3()

ya que el intérprete no lo permitirá.
La solución es invocar el comando de forma indirecta:

Shell("2to3")  # devuelve el objeto del comando

Vale la pena mencionar que de esta manera también se pueden ejecutar comandos válidos desde el punto de vista del intérprete, lo que deja la posibilidad de hacer scripts flexibles como

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

Pequeños cambios

  • Se han implementado los métodos __repr__() y __str__() del objeto de la clase Command, que ahora devuelven valores intuitivos (el comando con parámetros y su salida stdout respectivamente).
  • Pequeñas correcciones de código.
  • Adición de cobertura de pruebas, así como reorganización de lo existente.
  • Añadiendo las clases Subprocess y Process, cuyo objetivo es crear un nivel adicional de abstracción al trabajar con el módulo subprocess. Principalmente, es necesario para eliminar repeticiones de código al trabajar con Python 2/3, pero potencialmente también puede ofrecer otros beneficios.

¿Qué hay de nuevo en smart-env?

A diferencia de python-shell, en la biblioteca smart-env han habido menos cambios. La razón es simple: falta de tiempo libre, lo que llevó a que algunas mejoras potenciales (por ejemplo, autocompletar variables de entorno) se trasladaran a la siguiente versión.

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

  • Pequeñas correcciones de código.
  • Refactorización.
  • Reorganización y mejora de las pruebas existentes.

Planes para las siguientes versiones

La biblioteca python-shell

  • Adición de soporte para llamadas de comandos no bloqueantes (paralelización de ejecución).

La biblioteca smart-env

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

Se anunciarán más detalles sobre las fechas de los siguientes lanzamientos a través de los siguientes canales de comunicación:

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster