rudimentary ssh cmd wrapper with 1 small (and hopefully obvious) bug
John Hunter
jdhunter at ace.bsd.uchicago.edu
Sun Mar 2 22:59:03 EST 2003
1) payload = string.join(sys.argv[1:])
Strings have methods, so you can do ' '.join(sys.argv[1:]) and not
have to 'import string'
2)
while 1:
line = output.readlines()
if not line: break <<<<<<< is this
This is confusing to me. The typical idiom is
while 1:
line = output.readline() #reads only one line, not all
on_some_condition(): break
But in your case, you just want to return all the output, so
output.read() is probably what you want.
3) To test against the empty string, you may want to consider
if len(line.strip())==0
strip removes spaces and newlines
4) command_response = string.join(line[:]). See 1
5) node_in_caps = string.upper(machine)
node_in_caps = machine.upper()
6) if listening_status == 1:
can be simplified to 'if listening_status:'
Here, then, is a version of the script with these changes:
import os, sys
def the_command():
payload = ' '.join(sys.argv[1:])
sshcmd = 'ssh -1 -o StrictHostKeyChecking=no -l root ' + payload
output = os.popen('{ ' + sshcmd + '; } 2>&1', 'r')
return output.read()
machine = sys.argv[1]
node_in_caps = machine.upper()
print node_in_caps, the_command()
Note if you are feeling exceptionally pithy, you are perfectly welcome
to shorten 'the_command' to the one-liner
def the_command():
return os.popen('{ ssh -1 -o StrictHostKeyChecking=no -l root %s; } 2>&1' %
' '.join(sys.argv[1:])).read()
Whether this is readable and good python style is debatable.
JDH
More information about the Python-list
mailing list