pexpectは65文字を超えるとコマンドと一致しません。

pexpectは65文字を超えるとコマンドと一致しません。

問題予想する、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) に変更すると正常に動作します。

関連情報