簡體   English   中英

Python 中 print(stdout.read()) 的 output 顯示所有格式符號

[英]The output of print(stdout.read()) in Python shows all formatting symbols

我是 Python 的新手,並正在嘗試使用它進行網絡自動化。 我的第一個實驗只是在 Cisco 交換機上顯示“show version”命令的 output。 我的代碼如下:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("10.0.0.1", username="lab", password="lab")
(iin, stdout, stderr) = (ssh.exec_command("show ver"))
print(stdout.readlines())

output 是:

['Cisco IOS Software, C3560E Software (C3560E-UNIVERSALK9-M), Version 12.2(55)SE9, RELEASE SOFTWARE (fc1)\r\n', 'Technical Support: http://www.cisco.com/techsupport\r\n', 'Copyright (c) 1986-2014 by Cisco Systems, Inc.\r\n', 'Compiled Mon 03-Mar-14 22:28 by prod_rel_team\r\n', 'Image text-base: 0x00003000, data-base: 0x02800000\r\n', '\r\n', 'ROM: Bootstrap program is C3560E boot loader\r\n', 'BOOTLDR: C3560E Boot Loader (C3560X-HBOOT-M) Version 12.2(58r)SE1, RELEASE SOFTWARE (fc1)\r\n', '\r\n', 'SWITCH1 uptime is 2 hours, 8 minutes\r\n', 'System returned to ROM by power-on\r\n', 'System image file is 
etc.....

所以它顯示了 \r 和 \n 符號,但沒有創建新行等。

我正在使用 PyCharm 來執行此操作,同樣,我是它的新手,所以它可能是那里的設置而不是編程的東西。 我偶然點擊了“軟包裝”按鈕; 在此之前,它將整個 output 顯示在一行上。

如何讓它正確顯示?

這實際上是許多程序員在使用網絡設備時遇到的常見問題。 正如 kaya3 所提到的, readlines()返回一個列表,因此您可以遍歷列表、解碼原始數據並去除任何額外的字符:

注意- 在 Centos 7 中測試,使用 Python 2.7 和 GNS3,模擬 Cisco 3745 路由器。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("10.0.0.1", username="lab", password="lab")
(iin, stdout, stderr) = (ssh.exec_command("show ver"))

# New code:
output = stdout.readlines()
for line in output:
    print(line.decode().strip())

Output:

Cisco IOS Software, 3700 Software (C3745-ADVENTERPRISEK9-M), Version 12.4(25d), RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.

...

151K bytes of NVRAM.
65536K bytes of ATA System CompactFlash (Read/Write)

Configuration register is 0x2102

時刻注意你的回車和換行; 每個制造商都不同(甚至同一制造商的某些設備使用不同的行尾。)。 有些只會接受\r ,有些只會接受\n ,有些只會接受\r\n ,有些會在不同的時間接受\r\n

祝你編碼好運!

PS - 剛剛看到詹姆斯·K·波爾克總統在發布此消息后做出了回應。 print(''.join(stdout.readlines()))print(stdout.read())都可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM