Bon après-midi à tous !
29 février 2020 a eu lieu le micro-release officiel des bibliothèques smart-env et python-shell. Pour ceux qui ne sont pas au courant, je vous propose de lire d'abord .
En résumé, les changements incluent l'autocomplétion des commandes, l'élargissement des possibilités d'exécution des commandes, un peu de refactoring et des corrections de bugs.
Pour plus de détails, je vous invite à lire la suite.
Quoi de neuf dans python-shell ?
Je vais commencer par le dessert.
Autocomplétion des commandes
Vous êtes d'accord, c'est pratique quand l'éditeur/IDE/terminal suggère le nom de la commande et parfois même les paramètres d'appel ? C'est pourquoi python-shell progresse lentement pour offrir cette fonctionnalité. Étant donné que les champs de la classe Shell ne sont d facto pas ses champs (la fameuse __getattr__), l'autocomplétion a également été créée de zéro (en surchargeant donc la méthode __dir__). Actuellement, l'autocomplétion fonctionne dans les environnements BPython et IPython. Bien sûr, nous aimerions voir une intégration avec des produits plus établis comme PyCharm, et nous explorons les possibilités de mise en œuvre.
Ajout de propriétés
Dans le cadre de cette version, la classe Shell a reçu une nouvelle propriété last_command. Cela a été nécessaire car lors de la génération d'une exception ShellException avec une commande ayant un code de retour non nul, l'objet Command n'était pas retourné de l'appel __call__() de l'objet commande. Désormais, il est possible de faire comme suit :
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandLa liste des propriétés de l'objet Command s'est également élargie. Un champ errors a été ajouté, qui renvoie la sortie de la commande dans le flux d'erreurs.
Exécution des commandes avec des noms non valides en Python
Pratiquement dans tout système, il existe au moins un programme dont le nom n'est pas approprié comme identifiant en Python (par exemple, l'outil bien connu 2to3). L'appeler avec
Shell.2to3() ne fonctionnera pas — l'interpréteur ne le permettra pas.
La solution consiste à appeler la commande de manière détournée :
Shell("2to3") # renvoie l'objet commandeIl convient de noter que de cette manière, il est également possible d'exécuter des commandes valides du point de vue de l'interpréteur, ce qui laisse la possibilité de créer des scripts flexibles comme
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Petits changements
- Les méthodes __repr__() et __str__() de la classe Command ont été implémentées, et elles renvoient maintenant des valeurs intuitives (la commande avec ses paramètres et sa sortie stdout respectivement).
- Petites corrections de code.
- Ajout de la couverture par des tests, ainsi que réorganisation des éléments existants.
- Ajout des classes Subprocess et Process, dont l'objectif est de créer un niveau d'abstraction supplémentaire lors de l'utilisation du module subprocess. En grande partie, c'est nécessaire pour éliminer les répétitions de code lors de l'utilisation de Python 2/3, mais cela peut également offrir d'autres avantages.
Quoi de neuf dans smart-env ?
Contrairement à python-shell, la bibliothèque smart-env a subi moins de modifications. La raison est simple : le manque de temps libre, ce qui a conduit à reporter certaines améliorations potentielles (comme l'autocomplétion des variables d'environnement) à la prochaine version.
En fait, les modifications suivantes ont été apportées à la bibliothèque :
- Petites corrections de code.
- Refonte.
- Réorganisation et amélioration des tests existants.
Plans pour les prochaines versions
La bibliothèque python-shell
- Ajout de la prise en charge des appels non bloquants des commandes (parallélisation de l'exécution).
La bibliothèque smart-env
- Implémentation de l'autocomplétion des variables d'environnement dans la classe ENV.
- Prise en charge de l'opérateur in pour vérifier l'existence d'une variable d'environnement.
- Implémentation du support des fonctions str() et repr() pour la classe ENV.
Des informations sur les dates des prochaines versions seront communiquées via les canaux suivants :
- Mise à jour dans cet article.
Source : habr.com
