2016-07-04 3 views
0

python paramikoを使用してリモートマシン上でアプリケーションを呼び出したいと思います。このアプリケーションは、特定の文字列を入力して成功するまで待機します。どのように私はそれにSSH接続を介して要求された文字列を送信できますか?PythonでSSH接続を介して自動応答する方法

アプリケーションの呼び出しは次のようである:

./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. 

それから私はI KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY.を入力して続行するENTERを押す必要があります。

私はリモートホストに接続するには、このコードを持っている:

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

は私がself.sshlink.exec_command('cd app_addr;./app --init')を試してみました。それは何もしなかった。

+0

を[期待](HTTP ://expect.sourceforge.net/)。 Expectがオペレーティングシステムのパッケージとして利用可能であるかどうかを確認する必要があります。 – ghoti

+0

paramikoはどうやって使いますか? –

+0

@SergeBallesta、私の編集を確認してください! –

答えて

0

回答が不一致の回答の1つがthis questionであることがわかりました。

これは私が最終的にしようとしたと成功してきたものです:あなたは、プログラム的にこれを行うにリダイレクト標準入力が動作しない場合、その後、あなたが使用する方法を求めている場合は

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() 
関連する問題