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!