Python 脚本未正确传递变量

标签 python putty plink

在带有 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)

最佳答案

从文件读取时,行包含终止换行符。试试这个:

for line in SwitchFile:
    Switches.append(line.strip())

另请注意,常见的做法是使用小写名称调用变量。

关于Python 脚本未正确传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20892274/

相关文章:

linux 命令行直接进入下一行

Python 运行 ffmpeg 并进行多处理

python - Django 应用程序的 Heroku 等价物是什么?

linux - 如何重新映射 key : to go in vim command-line mode?

git - 错误 : waitpid for C:\Program Files (x86)\PuTTY\plink. exe 失败:没有子进程

java - 运行 autosys 批处理作业并在 java 中检查其状态

c# - 使用 SSH.NET 在命令输出期间发送输入

python - 使用 python 的数据透视表

python - 从终端停止 python 脚本

ssh - PuTTY 配置相当于 OpenSSH ProxyCommand