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

¡Buen día a todos!

El 29 de febrero de 2020, se realizó el microlanzamiento oficial de las bibliotecas smart-env y python-shell . Para aquellos que no están al tanto, les sugiero que primero lean la primera publicación .

En resumen, los cambios incluyen la finalización automática de comandos, expandir la capacidad de ejecutar comandos, un poco de refactorización y corrección de errores.

Pido detalles bajo cat.

¿Qué hay de nuevo en python-shell?


Comenzaré enseguida con el postre.

Finalización del equipo


De acuerdo: ¿es conveniente cuando el editor / IDE / terminal solicita el nombre del comando y, a veces, llama a los parámetros? Por lo tanto, python-shell está progresando un poco al proporcionar dicha funcionalidad. Debido al hecho de que los campos de la clase Shell bajo el capó de facto no son sus campos (omnipresente __getattr__), el autocompletado también se creó desde cero (al sobrecargar el método __dir__, respectivamente). La finalización automática se ejecuta actualmente en entornos BPython e IPython. Por supuesto, quiero ver la integración con productos más venerables como PyCharm, y en esta dirección estamos explorando las posibilidades de implementación.

Agregar propiedades


Como parte del lanzamiento, la clase Shell recibió una nueva propiedad last_command. La necesidad surgió debido al hecho de que cuando un comando con un código de retorno distinto de cero arrojó una ShellException, el objeto de comando no se devolvió de la llamada __call __ () del objeto de comando. Ahora hay una oportunidad para hacerlo:

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

También expandió la lista de propiedades del objeto Command. Se agregó un campo de errores, que devuelve la salida del comando a la secuencia de errores.

Ejecución de comandos con nombres inválidos de Python


Casi cualquier sistema tiene al menos un programa cuyo nombre no cabe como un identificador en Python (por ejemplo, la conocida utilidad 2to3). Llamarla con

Shell.2to3()

falla: el intérprete no saltará.
La solución es invocar el comando en una solución alternativa:

Shell("2to3")  #   

Vale la pena señalar que de la misma manera es posible ejecutar comandos que son válidos desde el punto de vista del intérprete, lo que permite crear scripts flexibles como

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

Cambios menores


  • Se implementan los métodos __repr __ () y __str __ () del objeto Command, que ahora producen valores intuitivos (un comando con parámetros y su escape estándar, respectivamente).
  • Correcciones menores por código.
  • Agregar cobertura de prueba y reorganizar las existentes.
  • Agregar las clases Subproceso y Proceso, cuyo propósito es crear un nivel adicional de abstracción cuando se trabaja con el módulo de subproceso. En su mayor parte, es necesario eliminar las repeticiones de código cuando se trabaja con Python 2/3, pero potencialmente puede dar otras bonificaciones.

¿Qué hay de nuevo en smart-env?


A diferencia de python-shell, hay menos cambios en la biblioteca smart-env. La razón de esto es simple: falta de tiempo libre, durante el cual algunas posibles mejoras (por ejemplo, la finalización de las variables de entorno) se trasladaron a la próxima versión.

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

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

Próximos planes de lanzamiento


Biblioteca Python-shell


  • Agregar soporte para llamadas de comando sin bloqueo (ejecución paralela).

Biblioteca inteligente-env


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

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


All Articles