我正在编写一个与众多系统交互的应用程序,特别是与交换机,
我正在尝试实现一个功能,使我能够使用 Fabric(python)从特定交换机检索日志
在与交换机的实际会话中,我需要先运行“启用”(并按 Enter 键),然后运行“调试生成转储”命令。
使用 fabric.operations.run() 我一次只能发出一个命令,使用 fabric.operations.open_shell() 不是一种选择,因为我需要解析输出并在完成后关闭连接。
有人可以帮忙吗?谢谢!!
以下是代码示例:
def getSwitchLog(self, host, port, username, password):
env.host_string = "%s:%s" % (host, port)
env.user = username
env.password = password
command = 'enable \r debug generate dump'
run(command, shell=cli, pty=True, combine_stderr=True, timeout=120)
shell=cli - 因为开关不运行 bash 并且 'cli' 在这种情况下是合适的值
\r 应该发送“输入”键本质上发送 1.启用 2.输入 3.调试生成转储
如果我使用 open_shell 切换运行,则此方法有效,但似乎运行忽略 \r
我能够使用以下方法实现我需要的东西:
command = 'sshpass -p admin ssh admin@switchIP cli \"enable\" \"show version\"'
fabric.api.local(command, capture=True, shell=None)
但是这种方法不如 fabric.api.run() 健壮,并且还需要运行节点安装 sshpass
这是交换机 CLI 的输出示例,因为命令以交互方式(键盘)输入,没有结构
[standalone: master] > enable
[standalone: master] # debug generate dump
[standalone: master] # debug generate dump Generated dump sysdump-SX6036-1-20130630-104051.tgz
[standalone: master] #
谢谢。