1

我编写了一个 python 脚本,可以通过读取列出不同 IP 地址的 csv 文件顺序登录到多个设备。从那里它为每个设备输出一个文件,其中包含通过脚本传递给设备的一些命令的内容。所以我已经走了很远。我遇到的一个问题是有时脚本会挂起。这是因为某些设备具有不同的软件版本,并且不支持传递给它们的某些命令。我关注的区别是登录后的提示。例如,登录到设备类型A有一个xyz#的命令提示符。设备类型 B 有一个命令类型 abc:。它是同一家制造商,只是型号和/或软件版本不同。根据命令提示符,我知道可以在该设备上运行的命令,而无需挂起脚本。

如果有帮助,我可以发布我的一些代码,但我真正想知道的是这是否可能。如果是这样,那么指针。关于我可能会尝试的一些建议。在使用 Python 几个月后,我知道必须有办法做到这一点。我通常不发帖,因为我可以处理其他人的帖子并制定可行的解决方案。但是我一直在努力解决这个问题,但无法将它拼凑起来,所以我正在寻求帮助。

-谢恩

编辑

在这一点上,我仍然无法编写代码来确定命令提示符。好吧,至少在 telnet 会话启动时。我可以远程登录,运行一些命令并关闭会话。然后我可以将结果写入文件。并从那里读取文件以确定提示。但理想情况下,我希望能够打开一个 telnet 会话,在会话仍然打开时运行命令来确定提示,在会话启动时读取它,然后根据提示运行特定命令。

问题似乎在于 telnet 会话仍在运行时无法读取任何命令输出。会话必须关闭,然后将所有输出写入文件。然后读取该文件以确定命令提示符,根据提示符确定要运行哪些命令,然后打开一个新的 telnet 会话并运行这些命令。

我是否应该接受我必须关闭 telnet 会话、将数据写入文件、读取它以确定提示然后再次循环返回脚本的登录部分的事实?还是我错过了什么?不确定我的描述是否清楚。

4

1 回答 1

1

我将使用一个通用接口实现这些命令,然后在我知道我连接到哪个系统时使用字典来检索它们:

# command set for system xyz#
def copy1(src, dest):
  pass

def list1():
  pass

# command set for system abc:
def copy2(src, dest):
  pass

def list2():
  pass


cmdDict = {
   # prompt  command set
   'xyz#':   [copy1, list1],
   'abc:'    [copy2, list2],
}

...

# guess the right commands from the prompt we have read
copyCommand = cmdDict[detected_prompt][0]
listCommand = cmdDict[detected_prompt][1]

...

# proceed normally

listCommand()
copyCommand(f1, g1)
copyCommand(f2, g2)
于 2012-04-19T23:02:41.460 回答