2017-08-10 2 views
-2

Ich versuche, einen Schalter Juniper mit pexpect Bibliothek zu verbinden einige Schnittstellen Informationen zu bekommen, hier ist mein Code:Python, pexpect an einen Switch verbinden mit

import pexpect 

child = pexpect.spawn('ssh [email protected]') 
child.expect('login as: ') 
child.sendline('root') 
child.expect('password:') 
child.sendline(mypassword) 
child.expect('% ') 
child.sendline('cli') 
child.expect('> ') 
child.sendline('show interface') 

Hier ist das Ergebnis:

Traceback (most recent call last): 

    File "first_test.py", line 4, in <module> 

    child.expect('login as: ') 

    File "/usr/lib/python2.7/site-packages/pexpect.py", line 1311, in 
expect 

    return self.expect_list(compiled_pattern_list, timeout, 
searchwindowsize) 

    File "/usr/lib/python2.7/site-packages/pexpect.py", line 1325, in 
expect_list 

    return self.expect_loop(searcher_re(pattern_list), timeout, 
searchwindowsize) 

    File "/usr/lib/python2.7/site-packages/pexpect.py", line 1409, in 
expect_loop 

    raise TIMEOUT (str(e) + '\n' + str(self)) 

pexpect.TIMEOUT: Timeout exceeded in read_nonblocking(). 

<pexpect.spawn object at 0x7fb21cfd5a50> 

version: 2.3 ($Revision: 399 $) 

command: /usr/bin/ssh 

args: ['/usr/bin/ssh', '[email protected]'] 

searcher: searcher_re: 

    0: re.compile("login as: ") 

buffer (last 100 chars): [email protected]'s password: 

before (last 100 chars): [email protected]'s password: 

after: <class 'pexpect.TIMEOUT'> 

match: None 

match_index: None 

exitstatus: None 

flag_eof: False 

pid: 20230 

child_fd: 3 

closed: False 

Es scheint, dass das Passwort nicht an den Switch gesendet wird. Ich bin ein neuer Python-Benutzer, tut mir leid, wenn es nicht klar ist. Wie kann ich richtig mit dem Schalter verbinden?

Antwort

0

Versuchen fabric - es ist höher als pexpect und definitiv einfacher zu bedienen.

Stoff ist ein Python (2,5-2,7) -Bibliothek und Kommandozeilen-Werkzeug für die Verwendung von SSH für Anwendungsbereitstellung oder Systeme Straffung Verwaltungsaufgaben.

Einfaches Beispiel basiert auf der Code wäre:

nach severals Tests
from fabric.api import env, run 
env.host_string = '10.171.23.246' 
env.user = 'root' 
env.password = 'put_your_password_here' 

run('cli') 
+0

Vielen Dank für Ihre Antwort, aber da mein Skript sehr portabel sein muss, muss ich pexpect verwenden. Ich werde versuchen Stoff als meine letzte Option, danke. – manoman

0

finde ich die Antwort, wurde das Problem der erste erwarten "child.expect ('Login als:')", wer nicht erwartet.

Dann habe ich ein ein das Ende erwartet das Ergebnis meines Befehl (show interface) zu warten, und ein Druck child.before die Ausgabe von meinem letzten sendline()

import pexpect 

child = pexpect.spawn('ssh [email protected]') 
child.expect('login as: ') 
child.sendline('root') 
child.expect('password:') 
child.sendline(mypassword) 
child.expect('% ') 
child.sendline('cli') 
child.expect('> ') 
child.sendline('show interface') 
child.expect(' > ') 
print child.before 

Es funktioniert zu zeigen!