在带有 Python 2.7.3 的 Debian 32 位最新版本上,我从源代码编译了 Plink(PuTTY 工具套件的一部分)。对于那些不熟悉的人,Plink 是在 SSH 服务器上发出命令的好工具,因此您可以编写命令脚本(我发现它们非常适合 Cisco 交换机,这就是我在这里所做的)。
我有一个名为switch.list的文件,其中包含每行上的开关名称,例如:
Net-Switch-1
Net-Switch-2
Backbone-1
现在我的 Python 脚本如下所示:
import subprocess
Switches = []
SwitchFile = open("switch.list")
for line in SwitchFile:
Switches.append(line)
SwitchFile.close()
for sw in Switches:
p = subprocess.Popen(["./plink","-ssh","-l","admin","-pw","REDACTED","-noagent","-batch",sw,"show","clock"], stdout=subprocess.PIPE)
print p.communicate()
我的输出是:
Unable to open connection:
Name or service not known
('', None)
一遍又一遍,就像我的开关次数一样多。这告诉我它正在读取文件并很好地填充数组,但是 Plink for 循环搞砸了。
故障排除:如果我将sw替换为硬编码的交换机名称,例如Net-Switch-1,那么它运行良好。这就是为什么我知道变量 sw 没有正确传递的原因。
更多故障排除:如果我从 CLI 运行 Plink 命令,省略开关名称,我会得到相同的错误输出,但没有第三行“ ('', None) ”
在我开始变得棘手的地方进行故障排除:这也不起作用:
p = subprocess.Popen(["./plink","-ssh","-l","admin","-pw","REDACTED","-noagent","-batch",(" "+sw),"show","clock"], stdout=subprocess.PIPE)