Maison  >  Article  >  développement back-end  >  Comment gérer les valeurs indésirables dans la sortie CLI SSH distante avec Paramiko ?

Comment gérer les valeurs indésirables dans la sortie CLI SSH distante avec Paramiko ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-19 07:08:31463parcourir

How to Deal with Junk Values in Remote SSH CLI Output with Paramiko?

Traitement des valeurs indésirables dans la sortie CLI SSH distante via Paramiko

Lors de l'utilisation de la bibliothèque Paramiko de Python pour les connexions SSH et la récupération des sorties à partir d'une machine distante CLI, les utilisateurs peuvent rencontrer des valeurs indésirables entrecoupées de la sortie souhaitée. Ces valeurs, souvent sous la forme de codes d'échappement ANSI comme "x1b[2Jx1b[1;1H", peuvent encombrer la sortie et gêner son utilisation.

Comprendre la source des valeurs indésirables

Contrairement à l'hypothèse selon laquelle ils sont indésirables, ces codes d'échappement sont essentiels pour un affichage correct des sorties dans un environnement de terminal. Ils fournissent des instructions au terminal sur la manière de formater le texte, de déplacer le curseur, etc. Cependant, si vous n'utilisez pas de borne interactive, ces codes peuvent poser problème.

Solution : exécuter des commandes de manière interactive

Par défaut, la méthode SSHClient.invoke_shell de Paramiko initie un session de borne interactive, qui conduit à l'inclusion de codes d'échappement. Pour éliminer cela, passez à la méthode exec_command, qui exécute des commandes sans pseudo-terminal (sauf si explicitement activé) :

<code class="python">stdin, stdout, stderr = client.exec_command('ls')</code>

Solutions alternatives

Si pour une raison quelconque vous devez utiliser le canal "shell", vous pouvez le créer manuellement sans pseudo-terminal. De plus, vous pouvez utiliser la solution de contournement suivante pour supprimer les séquences d'échappement de la sortie de chaîne :

<code class="python">import re
output = re.sub(r'(\x1b\[.*?m)', '', output)</code>

Decode Output Encoding

Notez que le caractère "u" précédant la chaîne sortie dans la question indique le codage Unicode. Ceci est nécessaire pour gérer les caractères non-ASCII dans la sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn