Nous réunissons Python et Bash: la sortie des bibliothèques python-shell et smart-env v. 1.0.1

Bonne journée à tous!

Le 29 février 2020, la micro-version officielle des bibliothèques smart-env et python-shell a eu lieu . Pour ceux qui ne sont pas au courant, je vous suggère de lire d' abord le premier post .

En bref, les changements incluent la saisie automatique des commandes, l'extension de la possibilité d'exécuter des commandes, un peu de refactoring et des corrections de bugs.

Je demande des détails sous chat.

Quoi de neuf dans python-shell?


Je vais commencer tout de suite avec le dessert.

Achèvement de l'équipe


D'accord - c'est pratique lorsque l'éditeur / IDE / terminal demande le nom de la commande, et appelle parfois des paramètres? Ainsi, python-shell progresse un peu en fournissant de telles fonctionnalités. Étant donné que les champs de la classe Shell sous le capot de facto ne sont pas ses champs (omniprésent __getattr__), la saisie semi-automatique a également été créée à partir de zéro (en surchargeant la méthode __dir__, respectivement). La saisie semi-automatique est en cours d'exécution sur les environnements BPython et IPython. Bien sûr, je veux voir l'intégration avec des produits plus vénérables comme PyCharm, et dans cette direction, nous explorons les possibilités de mise en œuvre.

Ajout de propriétés


Dans le cadre de la version, la classe Shell a reçu une nouvelle propriété last_command. Le besoin en était dû au fait que lorsqu'une ShellException était levée par une commande avec un code retour différent de zéro, l'objet Command n'était pas renvoyé à partir de l'appel __call __ () de l'objet de commande. Maintenant, il est possible de le faire:

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

Également développé la liste des propriétés de l'objet Command. Ajout du champ d'erreurs, qui renvoie la sortie de la commande au flux d'erreurs.

Exécution de commandes avec des noms Python non valides


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

Shell.2to3()

échoue - l'interprète ne sautera pas.
La solution consiste à appeler la commande dans une solution de contournement:

Shell("2to3")  #   

Il convient de noter que de la même manière, il est possible d'exécuter des commandes valides du point de vue de l'interpréteur, ce qui permet 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 Command sont implémentées, qui produisent désormais des valeurs intuitives (une commande avec des paramètres et son échappement stdout, respectivement).
  • Corrections mineures par 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 de sous-processus. Pour la plupart, il est nécessaire d'éliminer les répétitions de code lorsque vous travaillez avec Python 2/3, mais cela peut potentiellement donner d'autres bonus.

Quoi de neuf dans smart-env?


Contrairement à python-shell, il y a moins de changements dans la bibliothèque smart-env. La raison en est simple - le manque de temps libre, au cours duquel certaines améliorations potentielles (par exemple, l'achèvement des variables d'environnement) ont été reportées à la prochaine version.

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

  • Corrections mineures par code.
  • Refactoring
  • Réorganisation et affinement des tests existants.

Plans de la prochaine version


Bibliothèque shell Python


  • Ajout de la prise en charge des appels de commande non bloquants (exécution parallèle).

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 des fonctions str () et repr () pour la classe ENV.

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


All Articles