Making Python and Bash Friendship : sortie des bibliothèques python-shell et smart-env v. 1.0.1

Bonne journée à tous!

Février 29 2020 ans la micro-version officielle des bibliothèques a eu lieu environnement intelligent и coquille de python. Pour ceux qui ne sont pas au courant, je vous suggère de le lire d'abord premier poste.

En bref, les changements incluent l'achèvement des commandes, des capacités étendues pour l'exécution de commandes, une refactorisation et des corrections de bugs.

Pour plus de détails, veuillez consulter le chat.

Quoi de neuf dans python-shell ?

Je vais commencer tout de suite par le dessert.

Achèvement de la commande

D'accord - c'est pratique lorsque l'éditeur/IDE/terminal vous demande le nom de la commande, et parfois même les paramètres d'appel ? Ainsi, python-shell progresse progressivement en fournissant des fonctionnalités similaires. Étant donné que les champs de la classe Shell sous le capot ne sont de facto pas ses champs (l'omniprésent __getattr__), l'auto-complétion a également été créée à partir de zéro (en surchargeant la méthode __dir__, respectivement). La saisie semi-automatique fonctionne actuellement dans les environnements BPython et IPython. Bien sûr, j'aimerais voir une intégration avec des produits plus vénérables comme PyCharm, et des possibilités de mise en œuvre sont étudiées dans ce sens.

Ajout de propriétés

Dans le cadre de cette version, la classe Shell a reçu une nouvelle propriété last_command. Le besoin s'en faisait sentir car lorsqu'une ShellException était levée par une commande avec un code de retour différent de zéro, l'objet Command n'était pas renvoyé par l'appel __call__() à l'objet de commande. Il est maintenant possible de faire ceci :

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

La liste des propriétés de l'objet Command a également été élargie. Ajout d'un champ d'erreurs qui renvoie la sortie de la commande au flux d'erreurs.

Exécuter des commandes avec des noms Python non valides

Presque tous les systèmes ont au moins un programme dont le nom ne convient pas comme identifiant en Python (par exemple, l'utilitaire bien connu 2to3). Appelez-la avec

Shell.2to3()

Si cela ne fonctionne pas, l’interprète ne le laissera pas passer.
La solution est d'appeler la commande de manière détournée :

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

Il est à noter que de la même manière, vous pouvez 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)

Des changements mineurs

  • Les méthodes __repr__() et __str__() de l'objet de classe Command ont été implémentées, qui produisent désormais des valeurs intuitives (une commande avec des paramètres et sa sortie stdout, respectivement).
  • Corrections mineures du code.
  • Ajout d'une couverture de test et réorganisation de celles existantes.
  • Ajout des classes Subprocess et Process, dont le but est de créer un niveau d'abstraction supplémentaire lors de l'utilisation du module subprocess. Principalement nécessaire pour éliminer la duplication de code lorsque vous travaillez avec Python 2/3, mais peut potentiellement fournir d'autres bonus également.

Quoi de neuf dans smart-env ?

Contrairement à python-shell, il y a eu moins de modifications dans la bibliothèque smart-env. La raison en est simple : le manque de temps libre, pendant lequel certaines améliorations potentielles (par exemple, la saisie semi-automatique des variables d'environnement) ont été déplacées vers la version suivante.

En fait, les modifications suivantes ont été apportées à la bibliothèque :

  • Corrections mineures du code.
  • Refactorisation.
  • Réorganisation et affinement des tests existants.

Plans pour les prochaines versions

bibliothèque python-shell

  • Ajout du support des appels de commandes non bloquants (parallélisation de l'exécution).

bibliothèque smart-env

  • Implémentation de l'auto-complé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 env.
  • Implémentation du support des fonctions str() et repr() pour la classe ENV.

Les dates des prochaines sorties seront annoncées par les canaux de communication suivants :

Source: habr.com

Ajouter un commentaire