Python用paramiko获取Cisco交换机输出显示转义符不换行如何解决
问题原因
调用stdout.readlines()得到的是由每行字符串组成的列表,直接使用print打印列表时,Python会输出列表的结构化表示,其中的转义字符(\r、\n)会被原样打印而不会触发换行效果,该问题和PyCharm的Soft Wrap设置无关。
解决方案
- 方法1:直接读取完整输出再打印
把打印逻辑替换为如下代码,直接读取所有字节流解码为字符串后输出,会自动识别换行符完成换行:import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect("10.0.0.1", username="lab", password="lab") stdin, stdout, stderr = ssh.exec_command("show ver") # 读取完整内容解码后打印 print(stdout.read().decode('utf-8')) ssh.close() - 方法2:遍历输出列表逐行打印
如果需要对每一行内容单独做校验、提取等处理,可以遍历readlines()返回的列表逐行打印:import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect("10.0.0.1", username="lab", password="lab") stdin, stdout, stderr = ssh.exec_command("show ver") for line in stdout.readlines(): # 可根据需求选择是否加strip(),strip()会移除行首尾的空白符和换行符 print(line.strip()) ssh.close() - 适配优化:如果输出出现乱码,可以尝试把解码编码替换为
gbk或者latin-1适配不同网络设备的输出编码。
内容的提问来源于stack exchange,提问作者phil6564
相关产品推荐
相关产品推荐

