2016-06-30 24 views
0

Wie kann ich Befehle auf dem Remote-Server, an den ich mich anmelde, mit pexpect ausführen und das Ergebnis in Form einer Zeichenfolge in eine Variable speichern ?Ausführen von Befehlen auf dem Remote-Server und Speichern des Ergebnisses in einer String-Variablen in einem Python-Skript

Ich habe eine Verbindung zum Server auf folgende Weise:

COMMAND_PROMPT = '[#$] ' 
TERMINAL_PROMPT = '(?i)terminal type\?' 
TERMINAL_TYPE = 'vt100' 
SSH_NEWKEY = '(?i)are you sure you want to continue connecting' 

child = pexpect.spawn('ssh -l %s %s'%(loginuser, servername)) 
i = child.expect([pexpect.TIMEOUT, SSH_NEWKEY, COMMAND_PROMPT, '(?i)password']) 

if i == 0: # Timeout 
    print('ERROR! could not login with SSH. Here is what SSH said:') 
    print(child.before, child.after) 
    print(str(child)) 
    sys.exit (1) 

if i == 1: # In this case SSH does not have the public key cached. 
    child.sendline ('yes') 
    child.expect ('(?i)password') 

if i == 2: 
    # If a public key was setup to automatically login 
    pass 

if i == 3: 
    child.sendline(password) 
    # Now we are either at the command prompt or 
    # the login process is asking for our terminal type. 
    i = child.expect ([COMMAND_PROMPT, TERMINAL_PROMPT]) 
    if i == 1: 
     child.sendline (TERMINAL_TYPE) 
     child.expect (COMMAND_PROMPT) 

Nehmen wir nun an möchte ich den folgenden Befehl auf dem Server auszuführen ich angemeldet und das Ergebnis in eine Zeichenfolge in meinem Python-Skript speichern selbst:

ps -ef|grep process1 

Wie kann dies getan werden?

+0

Sie wollen 'pidof process1', wenn Sie Ihre Gesundheit schätzen. – tripleee

+0

Welcher Befehl sollte ich verwenden, wenn ich "pidof process1" ** auf dem Server ausführen möchte, auf dem ich mich in _in_ meinem Skript angemeldet habe ** und ** nicht den Server, auf dem currenty mein Skript hat **, und auch das Ergebnis als a speichern Zeichenfolge –

Antwort

0

Sie können read() Funktion verwenden, wird es Ihnen die gesamte Ausgabe geben.

result = child.read() 
1

Ich denke, das könnte Ihnen helfen.

import subprocess 
import sys 

url="http://www.anyurlulike.any" 
# Ports are handled in ~/.ssh/config since we use OpenSSH 
COMMAND="uname -a" 
ssh = subprocess.Popen(["ssh", "%s" % url, COMMAND], 
        shell=False, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE) 

result = ssh.stdout.readlines() 
if result == []: 
error = ssh.stderr.readlines() 
print >>sys.stderr, "ERROR: %s" % error 
else: 
print result 
+0

Subprozess: Es ist die Standard-Python-Bibliothek, die Befehle ausführt. Sie können es ausführen, SSH und tun, was Sie auf einem Remote-Server benötigen. –