Python脚本没有正确传递变量

时间:2014-01-02 21:29:55

标签: python putty plink

在最新版本的Debian 32-bit with Python 2.7.3中,我从源代码编译了Plink(PuTTY工具套件的一部分)。对于那些不熟悉的人来说,Plink是一个很好的工具,可以在SSH服务器上发出命令,这样你就可以编写命令脚本(我发现它们非常适合思科交换机,这就是我在这里所做的)。

我有一个名为 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)

2 个答案:

答案 0 :(得分:3)

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

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

另请注意,通常的做法是调用具有小写名称的变量。

答案 1 :(得分:0)

您正在正确阅读文件吗?如果文件中的信息由换行符分隔,请尝试不同的内容,例如。

with open(file_path, 'r') as f:
    data = f.readlines() #extracts to a list.
print data