2016-07-04 36 views
0

Ich möchte eine Anwendung auf einem Remote-Computer mit Python Paramiko aufrufen; Diese Anwendung wartet, bis Sie eine bestimmte Zeichenfolge eingeben und dann erfolgreich ist. Wie kann ich den angeforderten String über eine SSH-Verbindung an ihn senden?Wie automatische Ansagen über SSH-Verbindung in Python zu beantworten

Die Anwendung Aufruf ist wie:

./app --init 

This option will delete the database and recreate all files. 
OLD DATA (IF ANY) WILL BE LOST! 

This option must be used just on one of your servers. 
Running it on any one of the servers will delete the other server's data, too. 
If you are sure, type the following sentence and press ENTER: 

I KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY. 

Dann sollte ich I KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY. ein und drücken Sie ENTER fortzusetzen.

Ich habe diesen Code auf die Remote-Host verbinden:

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(ip, username=usrname, password=passwd, compress=True) 

I self.sshlink.exec_command('cd app_addr;./app --init') versucht; es hat nichts getan.

+0

Wenn Sie sich fragen, wie dies programmatisch zu tun, dann die Standardeingabe, wenn Umleitung nicht funktioniert, Sie könnten mit [erwarten] (http : //expect.sourceforge.net/). Sie müssen sehen, ob Expect als Paket für Ihr Betriebssystem verfügbar ist, was auch immer das ist. – ghoti

+0

Wie benutzt man Paramiko, und was nicht funktioniert? –

+0

@SergeBallesta, bitte überprüfen Sie meine Bearbeitung! –

Antwort

0

Ich fand die Lösung in einer der nicht angenommenen Antworten in this question.

Dies ist, was ich schließlich versucht habe, und es gelang ihm:

cmd = 'cd app_address;./app --init' 
answer = 'I KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY.' 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostname=ip, username=username, password=password) 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd) 
ssh_stdin.write(answer + '\n') 
ssh_stdin.flush() 
time.sleep(5) 
ssh_stdout.read()