0
ssh接続のstdoutからチャンク内のデータを取得し、各チャンクの最後に一致するパターンをチェックし、stdin経由で適切な応答を返す作業コードがあります。Pythonのサブプロセスのようなpexpectの機能
ssh = paramiko.SSHClient()
...
transport = ssh.get_transport()
session = transport.open_session()
session.set_combine_stderr(True)
session.get_pty()
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
session.exec_command(cmd)
for chunk in iter(lambda: session.recv(9999), ""):
if re.search('Password: $', chunk):
stdin.write(sudo_pw + '\n')
stdin.flush()
output += chunk
今、私はローカルで以下のようなコマンドを実行している使用してサブプロセスを持っている:
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
(output, err) = p.communicate()
どのように私はチャンクで出力を分析するのとまったく同じロジックを実装し、stdinを介して適切な応答を送信することができますか?私はpexpectを使わずに解決策を探しています。