我正在编写一个脚本来登录交换机,将配置写入文件,然后重命名该文件。我有部分工作。问题是我无法弄清楚如何在同一个函数中获取所有部件,以便我可以在设备列表中使用该功能。我在'for line in f'语句中得到一个未打开的文件。当我看到文件仍然打开时。 我已经尝试编写一个函数来重命名自己工作的文件,但不能在这个脚本中与其他部分一起使用。 我有另一个我编写的脚本,它在函数之外有重命名部分,但如果使用Exscript'quickstart'模块调用多个主机,则无法重命名该文件。 谢谢你的帮助,
from Exscript.util.start import quickstart
import os
import datetime
import time
time = datetime.datetime.now().strftime("%d-%m-%Y")
tm = 'c:/test/tmp.txt'
def do_something(job, host, conn):
f = open(tm, 'w+') #opens File with read and write permissions
conn.execute('term len 0')
conn.execute('sh run')
f.write(conn.response)
conn.execute('quit')
#this is the part where the error comes
for line in f:
if "hostname" in line:
host = line.strip()
test = 'c:/test/' + host[9:] + 'on' + time + '.txt'
os.rename(tm, test)
quickstart('ssh://x.x.x.x', do_something)
答案 0 :(得分:0)
根据manual,模式w+
截断(删除所有内容)文件。如果要在不破坏其内容的情况下打开文件进行读取和写入,请使用模式r+
或a+
。
:: edit ::注意,我不确定这在Windows上是如何工作的。
答案 1 :(得分:0)
您必须使用f.seek(0)
在文件开头测试文件指针。或者首先写入文件然后关闭它然后重新打开它以供阅读。但是你根本不需要文件 - 你也可以使用本地变量。