Замена текста с \ n в нем реальным выводом \ n

Я пытаюсь получить конфигурацию от можжевелового роутера, и у меня возникла следующая проблема:

После установки этого

stdin, stdout, stderr = client1.exec_command('show configuration interfaces %s' % SID)
 CONFIG = stdout.read()
 print CONFIG

Это приносит мне что-то вроде этого

'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'

и проблема в том, что я хочу получать эту информацию в таком формате:

'description El_otro_Puerto_de_la_Routing-instance;
 nvlan-id 309;
 nfamily inet {
  mtu 1600;
  address 10.100.10.10/24;
 }

Поэтому я хочу, чтобы \ n действительно была новой строкой, а не просто показывала мне строку «\ n».


person agusbava    schedule 23.03.2017    source источник
comment
Что показывает print repr(CONFIG)?   -  person jonrsharpe    schedule 23.03.2017
comment
Строка печатается в кавычках? Похоже, это строковое представление строки.   -  person Peter Wood    schedule 23.03.2017
comment
См. stackoverflow.com/questions/24886123/   -  person phlaxyr    schedule 15.11.2020


Ответы (4)


Если вы запускаете это в интерпретаторе Python, это обычное поведение интерпретатора - показывать новые строки как \ n вместо фактических новых строк, потому что это упрощает отладку вывода. Если вы хотите получить в интерпретаторе фактические символы новой строки, вы должны print получить строку.

Если это то, что выводит программа (т. Е .: вы получаете escape-последовательности новой строки из внешней программы), вы должны использовать следующее:

OUTPUT = stdout.read()
formatted_output = OUTPUT.replace('\\n', '\n').replace('\\t', '\t')
print formatted_output

Это заменит экранированные символы новой строки фактическими символами новой строки в выходной строке.

person Pedro Castilho    schedule 23.03.2017
comment
Я хотел бы использовать eval () для поддержки анализа любой возможной escape-последовательности. например: formatted_output = eval ('{}'. format (OUTPUT) - person TingQian LI; 30.10.2018
comment
Никогда не запускайте eval () для ненадежных входных данных. - person Pedro Castilho; 01.11.2018

Альтернативой тому, что вы хотите, является разделение вашей строки на список строк (на строку).

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
#c
person jberrio    schedule 23.03.2017
comment
Я считаю, что это не вопрос автора. Я считаю, что они пытались заменить escape-последовательность '\ n' фактическим символом новой строки. - person Pedro Castilho; 23.03.2017
comment
Прочтите, где говорится об альтернативе тому, что вы хотите. Человек не сказал, относится ли этот вопрос конкретно к интерпретатору, консоли (cmd в Windows) или записи в файл. - person jberrio; 23.03.2017

Это тоже работает:

CONFIG = """{}""".format(CONFIG)
person DannyMoshe    schedule 28.06.2019

В Python 3+ лучший способ интерпретировать все escape-символы:

print(f"{yourStringHere}")

Здесь используются f-строки, которые, на мой взгляд, , вероятно, самый элегантный способ решить эту проблему.

person Daniel    schedule 18.05.2021