問題予想する、Pythonモジュール。
コマンドの長さが65より大きい場合、Pexpectは予想される動作を実行しません。
#!/usr/bin/python
import pexpect
sshCmd='ssh [email protected]'
prompt='[root@user ~]#'
ConnectToClient=pexpect.spawn(sshCmd)
ConnectToClient.expect('password')
ConnectToClient.send('abcd')
ConnectToClient.expect(prompt)
ConnectToClient.send('echo abcdefghijklmnopqrst111111111111111111111111111111111111111111111111111111111 ')
ConnectToClient.expect(prompt) ---> PASS
command = 'echo abcdefghijklmnopqrst111111111111111111111111111111111111111111111111111111111'
ConnectToClient.expect(command, prompt)
":"が予想される場合、command (.*) prompt
--->失敗するコマンド長が65文字を超える場合。
expect_str = "%s(.*)%s" % (command, self._default_prompt)
答え1
プログラムには2つのエラーがあります。最後の行は違法です。
ConnectToClient.expect(command, prompt)
Expectは文字列の代わりにタイムアウト数字を2番目のパラメータとして使用するため、効果はありません。
通話中の他の質問は次のとおりです。
ConnectToClient.expect(prompt)
prompt
正規表現(正規表現)でなければなりません。文字列を指定すると、正規表現にコンパイルされます。しかし、正規表現ではこの文字は[
特別なので、エスケープする必要があります。すべての設定
prompt = r'\[root@user ~\]#'
または、regexの代わりに文字列を必要とするuseを使用しないでください.expect()
。.expect_exact()
答え2
デフォルトでは、プロンプトとコマンドが80より長い場合、pexpect windowsizeは(24行と80列)に設定されます。私はこの問題に直面しています。 setwinsize(24,80) を setwinsize(24,150) に変更すると正常に動作します。