Estoy tratando de obtener una configuración de un enrutador Juniper y tengo el siguiente problema:
Después de configurar esto
stdin, stdout, stderr = client1.exec_command('show configuration interfaces %s' % SID) CONFIG = stdout.read() print CONFIGme trae algo asi
'description El_otro_Puerto_de_la_Routing-instance;\nvlan-id 309;\nfamily inet {\n mtu 1600;\n address 10.100.10.10/24;\n}\n'y el problema es que quiero recibir esa información en este formato:
'description El_otro_Puerto_de_la_Routing-instance; nvlan-id 309; nfamily inet { mtu 1600; address 10.100.10.10/24; }Así que quiero que \n sea en realidad una nueva línea, y no solo que me muestre la cadena "\n".
Si está ejecutando esto en el intérprete de Python, el comportamiento normal del intérprete es mostrar líneas nuevas como "\n" en lugar de líneas nuevas reales, porque facilita la depuración de la salida. Si desea obtener nuevas líneas reales dentro del intérprete, debe print la cadena que obtiene.
Si esto es lo que genera el programa (es decir, obtiene secuencias de escape de nueva línea del programa externo), debe usar lo siguiente:
OUTPUT = stdout.read() formatted_output = OUTPUT.replace('\\n', '\n').replace('\\t', '\t') print formatted_outputEsto reemplazará las nuevas líneas escapadas por nuevas líneas reales en la cadena de salida.
Una alternativa a lo que desea es dividir su cadena en una lista de cadenas (por línea).
mystr = 'a\nb\nc' mystr = mystr.split(sep='\n') print(mystr) #this will be your print output:['a', 'b', 'c'] for s in mystr: print(s) #your print output: #a #b #cUna expresión regular puede ayudar a localizar las secuencias \x . Sin embargo, los pares de sustitución aún tendrán que especificarse manualmente, al igual que en la respuesta de @PedroCastilho.
import re CONFIG = stdout.read() print(re.sub(r'\\.',lambda x:{'\\n':'\n','\\t':'\t'}.get(x[0],x[0]),CONFIG)) Esto reemplazará \\n -s y \\t -s con tabuladores y saltos de línea reales, y dejará intactos los desconocidos.
Me gusta
print(re.sub(r'\\.',lambda x:{'\\n':'\n','\\t':'\t'}.get(x[0],x[0]), 'foo\\nbar\\nbaz\\tbrr\\n\\q'))huellas dactilares
foo bar baz brr \q
Así que los saltos de línea y el tabulador están en su lugar, y \q simplemente sobrevivió.