我有一个文件,其中有一个主机列表,我有另一个文件,其中有一个命令列表。我正在尝试循环访问主机文件并使用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表中,每个设备就像这样。 我听说过像xlwt这样的python库,但是正在寻求有关如何实现这一目标的帮助。
答案 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")