我最终尝试使用Exscript创建一些基本功能来控制我的cisco测试实验室设备。到目前为止,Exscript已经为我做了一切,我只是举几个函数。
我遇到的问题是创建这个reload_start()函数,该函数执行reload命令,重新启动我的Cisco设备并恢复我在测试运行中所做的任何更改。我已经尝试了几十种不同的字符串组合来执行,但是无法解决它在输入'reload'时出现的其他提示
相比之下,我的copy_to_running_config()函数运行正常,只需在字符串末尾添加'\ n'即可。
我还没有跳进Exscript的提示函数(get_prompt(),expect_prompt(),waitfor()等),我猜这是我需要探索的途径,但我找不到这个例子这符合我的具体目标。
from Exscript import Account
from Exscript.protocols import Telnet
from Exscript.protocols.drivers import ios
def __init__(self, ip):
self.ip = ip
self.account = Account('admin', 'key')
self.conn = Telnet()
self.conn.set_driver('ios')
self.conn.connect(ip)
self.conn.login(self.account)
self.conn.execute('terminal length 0')
def enable(self):
self.conn.execute('enable')
def copy_to_running_config(self, config):
self.enable()
self.conn.execute('copy flash:{0} running-config \n'.format(config))
res = self.conn.response
self.conn.execute('exit')
return res
def reload_start(self):
self.enable()
self.conn.execute('reload \n no \n')
print self.conn.response
非常感谢任何帮助或意见!
答案 0 :(得分:0)
你的函数reload_start应如下所示:
def reload_start(self):
self.enable()
self.conn.set_prompt(r'Save\? \[yes/no\]\:')
self.conn.execute('reload')
self.conn.set_prompt(r'Proceed with reload\? \[confirm\]')
self.conn.execute('no')
self.conn.set_prompt()
self.conn.execute('confirm')
print self.conn.response
在执行命令之前,必须为提示设置正则表达式。否则,Exscrpt无法确定何时发送下一个命令。
尽管如此,如果配置没有更改且路由器没有要求您保存,则上面的脚本将无效,因为它会等待保存问题。