Pergunta

On the latest version of Debian 32-bit with Python 2.7.3, I've compiled Plink (part of the PuTTY suite of tools) from source. For those unfamiliar, Plink is a great tool to issue commands on SSH servers so you can script your commands (I've found them wonderful for Cisco switches, which is what I'm doing here).

I have a file called switch.list containing names of switches on each line, such as:

Net-Switch-1
Net-Switch-2
Backbone-1

Now my Python script looks like this:

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()

My output is:

Unable to open connection:
Name or service not known
('', None)

Over and over, for as many times as my switch count. That tells me it's reading the file and populating the array just fine, but the Plink for-loop is messed up.

Troubleshooting: If I replace sw with a hard-coded switch name, like Net-Switch-1, then it runs fine. This is why I know the variable, sw, isn't being passed along correctly.

More Troubleshooting: If I run the Plink command from CLI, omitting the switch name, I get the same error output, but without the third line of "('', None)"

Troubleshooting where I start to get tricky: This doesn't work either:

 p = subprocess.Popen(["./plink","-ssh","-l","admin","-pw","REDACTED","-noagent","-batch",(" "+sw),"show","clock"], stdout=subprocess.PIPE)
Foi útil?

Solução

When reading from file, lines contain the terminating new-line character. Try this instead:

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

Note also, that the common practice is to call variables with lower-case names.

Outras dicas

Are you reading the file correctly? If the info in the file is separated by newlines, Try something different like.

with open(file_path, 'r') as f:
    data = f.readlines() #extracts to a list.
print data
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top