web-dev-qa-db-ja.com

\ 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を実際には改行にしたいのです。

6
agusbava

これをPythonインタープリターで実行している場合、出力のデバッグが容易になるため、実際の改行ではなく「\ n」として改行を表示するのがインタープリターの通常の動作です。 。インタプリタ内で実際の改行を取得する場合は、取得した文字列をprintする必要があります。

これがプログラムの出力である場合(つまり、外部プログラムから改行エスケープシーケンスを取得している場合)、次を使用する必要があります。

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

これにより、エスケープされた改行が出力文字列の実際の改行に置き換えられます。

14
Pedro Castilho

これも機能します:

CONFIG = """{}""".format(CONFIG)
0
DannyMoshe

必要なものの代わりに、文字列を文字列のリスト(1行あたり)に分割することもできます。

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
0
jberrio