循环遍历Paramiko中的主机和命​​令列表,并使用列标题将结果存储在excel中

时间:2014-02-05 12:06:16

标签: python paramiko xlwt

我有一个文件,其中有一个主机列表,我有另一个文件,其中有一个命令列表。我正在尝试循环访问主机文件并使用paramiko运行命令文件中的所有命令。这些命令基本上都是检查参数如uptime,当前cpu,登录用户数等。这是我的代码:

#! /usr/bin/python

import sys
import paramiko


username = "log_me_in"
password = "secret"

# Opens files in read mode
f1 = open(hostfile,"r")
f2 = open(commandfile,"r")

# Creates list based on f1 and f2
devices = f1.readlines()
commands = f2.readlines()



for device in devices:
    device = device.rstrip()
    for command in commands:
        command = command.rstrip()
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(device, username=username, password=password)
        stdin, stdout, stderr = ssh.exec_command(command)
        output = stdout.read()
        data =[]
        data.append(output)
        ssh.close()
f1.close()
f2.close()

我遇到的问题是在远程机器上执行命令之后。我希望执行的每个命令的stdout存储在一行中的excel表中,每个设备description here就像这样。 我听说过像xlwt这样的python库,但是正在寻求有关如何实现这一目标的帮助。

1 个答案:

答案 0 :(得分:2)

对于接下来的两段代码,我假设存在以下内容:

header = ["Device Name", "Uptime", "CPU", "Count of users logged in"]
data = [
    ('ns1', '200 days', '10%', '15'),
    ('ns2', '23 days', '12%', '23'),
    ('ns3', '45 days', '56%', '108')
]

使用CSV可以使代码更简单,并且可以在任何计算机上轻松部署,因为它不需要安装任何其他软件包(csv是Python的标准配置):

import csv

with open('output.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, dialect='excel')
    spamwriter.writerow(header)
    for row in data:
        spamwriter.writerow(row)

将生成以下output.csv文件:

Device Name,Uptime,CPU,Count of users logged in
ns1,200 days,10%,15
ns2,23 days,12%,23
ns3,45 days,56%,108

现在,如果你真的想使用xlwt,这里就是等效的(为标题添加额外的黄色背景颜色):

import xlwt

book = xlwt.Workbook()
sheet = book.add_sheet("foobar")

# Put the header in the appropriate cells...
style = xlwt.easyxf('pattern: pattern solid, fore-colour yellow')
for col, text in enumerate(header):
    sheet.write(0, col, text, style)

# Now, let's write the contents

for row, data_in_row in enumerate(data):
    for col, text in enumerate(data_in_row):
        sheet.write(row + 1, col, text)

book.save("example.xls")