将Cisco路由器的SSH输出打印到文本文件

时间:2013-12-24 20:07:53

标签: python ssh output cisco

我是Python以及编程世界的新手。经过对过去2天的一些研究,我现在能够成功SSH到Cisco路由器并执行一组命令。但是我最初的目标是将结果输出打印到文本文件中。检查了论坛成员的许多帖子,这些帖子帮助我构建了代码,但是我无法将结果打印在文本文件中。请帮忙。

这是我的代码:

import paramiko
import sys
import os

dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect('10.0.0.1', username='cisco', password='cisco')  
stdin, stdout, stderr = dssh.exec_command('sh ip ssh')
print stdout.read()
f = open('output.txt', 'a')
f.write(stdout.read())
f.close()
dssh.close()

2 个答案:

答案 0 :(得分:2)

stdout.read()将读取内容并向前移动文件指针。因此,后续调用将无法再次读取内容。因此,如果要打印内容将其写入文件,则应先将其存储在变量中,然后再打印并写入。


  

不是直接在代码上提及IP地址,而是可以从文本文件中的IP地址列表(逐行提到)中获取它?

您可以从以下文件中读取行:

with open('filename') as f:
    for line in f:
        # Each line will be iterated; so you could call a function here
        # that does the connection via SSH
        print(line)

答案 1 :(得分:1)

我知道这已经很晚了,但下面的代码就是我正在使用的代码。

from __future__ import print_function
from netmiko import ConnectHandler

import sys
import time
import select
import paramiko
import re
fd = open(r'C:\Users\NewdayTest.txt','w') 
old_stdout = sys.stdout   
sys.stdout = fd 
platform = 'cisco_ios'
username = 'Username'
password = 'Password'

ip_add_file = open(r'C:\Users\\IPAddressList.txt','r') 

for host in ip_add_file:
    device = ConnectHandler(device_type=platform, ip=host, username=username, password=password)
    output = device.send_command('terminal length 0')
    output = device.send_command('enable')
    print('##############################################################\n')
    print('...................CISCO COMMAND SHOW RUN OUTPUT......................\n')
    output = device.send_command('sh run')
    print(output)
    print('##############################################################\n')
    print('...................CISCO COMMAND SHOW IP INT BR OUTPUT......................\n')
    output = device.send_command('sh ip int br')
    print(output) 
    print('##############################################################\n')

fd.close()

或者,如果您想从单个主机打印,请使用此轻微编辑。这只是删除寻找列表来获取IP地址:

from __future__ import print_function
from netmiko import ConnectHandler

import sys
import time
import select
import paramiko
import re
fd = open(r'C:\Users\NewdayTest.txt','w') 
old_stdout = sys.stdout   
sys.stdout = fd
host = '10.10.10.10'
platform = 'cisco_ios'
username = 'Username'
password = 'Password'
device = ConnectHandler(device_type=platform, ip=host, username=username, password=password)
output = device.send_command('terminal length 0')
output = device.send_command('enable')
print('##############################################################\n')
print('...................CISCO COMMAND SHOW RUN OUTPUT......................\n')
output = device.send_command('sh run')
print(output)
print('##############################################################\n')
print('...................CISCO COMMAND SHOW IP INT BR OUTPUT......................\n')
output = device.send_command('sh ip int br')
print(output) 
print('##############################################################\n')

fd.close()