3

Pythonparamikoモジュールを使用して、組み込みの parmiko 関数SSH.executeをリモート サーバーで実行しています。サーバー上で 4 つのプロンプトを必要とするスクリプトを実行したいと考えています。私はこれのより複雑なバージョンを行うことを計画していました:

   ExpectedString = 'ExpectedOutput'
   Output = SSH.execute('./runScript')
   if Output == ExpectedString:
       SSH.execute('Enter this')
   else:
       raise SomeException

問題は、サーバーが番号の入力を待っていて、スクリプトがこの SSH.execute コマンドでスタックするため、何も出力されないことです。そのため、別のSSH.executeコマンドが実行された後に別のコマンドが実行されたとしても、実行されることはありません! paramiko 以外のものを使用する必要がありますか?

4

2 に答える 2

3

リモート スクリプトと対話する必要があります。実際にSSH.executeは存在しませんexec_command。出力を返すだけでなく、実際には stdout、stdin、および stderr ストリームのラッパーを提供します。これらを直接使用して、リモート スクリプトと通信できます。

基本的に、これはコマンドを実行し、stdin を介してデータを渡す (および stdout を使用して出力を受け取る) 方法です。

ssh.connect('127.0.0.1', username='foo', password='bar')

stdin, stdout, stderr = ssh.exec_command("some_script")

stdin.write('expected_input\n')
stdin.flush()

data = stdout.read.splitlines()

もちろん、タイミングに頼るのではなく、プロンプトを確認する必要があります。

于 2012-10-08T15:40:04.830 に答える