python shell ssh paramiko

¿Hay una manera simple de deshacerse de los valores basura que vienen cuando usa SSH usando la biblioteca Paramiko de Python y obtiene la salida de CLI de una máquina remota?



shell (2)

Estoy usando la biblioteca Paramiko de Python para SSH una máquina remota y obtener algunos resultados de la línea de comandos. Veo mucha impresión basura junto con la salida real. ¿Cómo deshacerse de esto?

chan1.send("ls/n") output = chan1.recv(1024).decode("utf-8") print(output) [u''Last login: Wed Oct 21 18:08:53 2015 from 172.16.200.77/r'', u''/x1b[2J/x1b[1;1H[local]cli@BENU>enable'', u''[local]cli@BENU#Configure'',

Quiero eliminar, [2J / x1b [1; 1H yu de la salida. Son basura


Esto en realidad no es basura. La u antes de la cadena indica que se trata de una cadena unicode. El /x1b[2J/x1b[1;1H es una secuencia de escape. No sé exactamente qué se supone que debe hacer, pero parece borrar la pantalla cuando lo imprimo.

Para ver a qué me refiero, intente este código: for string in output: print string


No es basura. Estos son códigos de escape ANSI que normalmente son interpretados por un cliente terminal para imprimir bastante la salida.

Si el servidor está configurado correctamente, solo obtendrá estos, cuando utilice un terminal interactivo, en otras palabras, si solicitó un pseudo terminal para la sesión (lo que no debería, si está automatizando la sesión).

El Paramiko solicita automáticamente el pseudo terminal, si usó invoke_shell , ya que se supone que debe usarse para implementar un terminal interactivo.

Si automatiza la ejecución de comandos remotos, es mejor usar el exec_command , que no asigna el pseudo terminal por defecto (a menos que lo anule mediante el argumento get_pty=True ).

stdin, stdout, stderr = client.exec_command(''ls'')

O como solución alternativa, consulte ¿Cómo puedo eliminar las secuencias de escape ANSI de una cadena en python ?

Aunque eso es más bien un truco y podría no ser suficiente. Es posible que tenga otros problemas con el terminal interactivo, no solo las secuencias de escape.

Probablemente tampoco le interese el mensaje "Último inicio de sesión" ni el símbolo del sistema ( cli@BENU> ). No obtienes estos con el exec_command .

Y finalmente, el u no es parte del valor real de la cadena (tenga en cuenta que está fuera de las comillas). Es una indicación de que el valor de la cadena está en la codificación Unicode. ¡Quieres eso!