PerlからPythonにスクリプトを実行して、リモートサーバーやデバイス上の特定のタスクを自動化することについて考えてみましょう。 Expectを使用して特定の結果を確認し、データを戻す必要があります。 Paramiko-Expectを見て、私はそれが好きですが、毎回タイムアウトしています。paramikoがタイムアウトを期待する
import paramiko
from paramikoe import SSHClientInteraction
HOSTNAME = "HOST IP"
PASSWORD = "PWORD"
USERNAME = "UNAME"
PROMPT = "(node name)#"
command = "show command"
print PROMPT
file = open("testlog.txt","w")
def main():
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(HOSTNAME, port=22, username=USERNAME, password=PASSWORD)
interact = SSHClientInteraction(client, timeout=10, display=True)
interact.send(command)
interact.expect(PROMPT)
file.write(interact.current_output_clean)
client.close()
return
main()
file.close()
これは私が取得トレースバックです:
Traceback (most recent call last):
File "python_test.py", line 40, in <module>
main()
File "python_test.py", line 28, in main
interact.expect(PROMPT)
File "/usr/local/lib/python2.7/site-packages/paramikoe.py", line 122, in expect
buffer = self.channel.recv(self.buffer_size)
File "/usr/local/lib/python2.7/site-packages/paramiko/channel.py", line 598, in recv
raise socket.timeout() socket.timeout
私が直接私がフルに上でそれをしようとしているノードのテキストに入れてから、期待するPROMPTの複数のバージョンを試してみました正規表現。何も動作しません。 client.expectに到達すると常にタイムアウトします。 Paramiko-expectドキュメンテーションは役に立たず、この質問を見る唯一の他の場所は、それが助けにならないほど十分に異なっています。 アドバイスありがとうございます。
私はプロンプトに入力しているものの例としてPROMPT = "(ノード名)#"を入力します。私はそこに正規表現を使用し、正確なプロンプトに設定する必要がありますが、私はタイムアウトをどちらかの方法で取得する必要があります。 ネットミコを見ていきます。 –
多分正規表現は問題ですか?私の変更であなたのコードはうまくいきました... –
私はそれを正規表現に設定し、あなたのように正確なプロンプトに設定しようとしました。だから私は本当になぜそれがあなたのために働いているのではなく、私ではないのですか?しかし、コードではないようですので、私は他の解決策を探します。 –