早上好的家伙
这一次,我没有提出具体的代码问题,而是使用了#34;我是否在正确的轨道上"问题
我想编写一个用于暂存网络设备的脚本。我将获得一个包含两列的cvs列表:Hostname + HW Type,类似于:
Hostname,Type
TestAP-1,AP250
TestAP-2,AP250
TestAP-3,AP250
TestSW-1,SW100
TestSW-2,SW100
TestAP-4,AP250
真正的清单显然会更长。
到目前为止,我的想法是解析调用HW Type脚本的参数以获取Hostnames列表。然后连接到硬件(IP地址将始终是相同的默认IP或通过串行控制台),向硬件发送一些命令(设置主机名,系统日志服务器IP等),再次从机器读取值(使用show命令) )并将结果写入另一个csv文件。
类似的东西:
staging.py AP250
get a list with all hostnames where the HW Type is AP250
loop
connect (ssh or serial) to the hardware
commands:
set hostname 'hostname'
set syslog ip (fixed ip address, the same for all devices)
set whatever need to be set as well
the do a show on these settings and parse the value
write the value to a output csv file (create or append)
我是否在正确的轨道上?现在,我的脚本如下所示:
import csv
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('Type', type=str,
help='REQUIRED: Please enter the Hardware Type (AP250, SW100, etc)')
args = parser.parse_args()
Manager = "manager.domain.com"
MACAddress = "aa:bb:cc:dd:ee:ff"
with open("input.csv", 'r', newline='') as f:
reader = csv.DictReader(f)
for row in reader:
if row['Type'] == args.Type:
print(row['Hostname']) # This will later on be replaced by some paramiko code
h = (row['Hostname'])
t = (row['Type'])
outdict = {}
print (outdict)
"""
with open('output.csv', 'w', newline='') as o:
writer = csv.DictWriter(o, delimiter=',', fieldnames=["Hostname", "Type", "Hivemanager", "MACAddress"])
writer.writeheader()
newrow = (h + "," + t + "," + Manager + "," + MACAddress)
writer.writerow(newrow)
#writer.writerows(['Hostname'], ['Type'], Manager)
print (open('output.csv', 'r').read())
"""
input("Press Enter to continue")
我不确定的地方:
我不希望完全正常工作的脚本作为答案。而不是那些,我可以得到一些想法的一些提示或链接将是伟大的。
非常感谢。
答案 0 :(得分:1)
关于你的第一个问题,正在使用词典正确的做法与否,答案是双重的。首先,如果你的目标是csv
读者,那么绝对是。这是正确的做法。您以CSV格式获取输入数据,因此csv.DictReader
没有合理的方法。其次,输出部分;这是您希望存储返回值的位置。你不一定需要一本字典,在我看来,列表会更容易。您计划使用outdict
,对吧?但这也是个人品味的问题,字典也是如此,只是访问数据有点不同。底线是:是的,你在第一个问题的正确轨道上。
在主机名上循环并在每个主机名上执行所有操作会有什么(明智的)替代方案?这样可以最大限度地减少必须对各个主机执行的登录操作,如果在脚本中间断开网络连接,则只需修复一个主机,而不是全部主机。
我希望这会对你有所帮助。