如果超过 65 个字符,pexpect 将无法匹配命令

如果超过 65 个字符,pexpect 将无法匹配命令

问题与期待,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

你的程序有两处错误。最后一行是非法的:

ConnectToClient.expect(command, prompt) 

无效,因为 Expect 将超时数字而不是字符串作为第二个参数。

另一个问题是在通话中:

ConnectToClient.expect(prompt)

prompt应该是regex(正则表达式)。您提供一个字符串,它将被编译成正则表达式。但是,在正则表达式中,该字符[很特殊,因此您需要对其进行转义。任意设定

prompt = r'\[root@user ~\]#'

或者不使用需要字符串而不是正则表达式的.expect()use 。.expect_exact()

答案2

默认情况下,当提示和命令的长度超过 80 时,我的情况下 pexpect windowsize 设置为(24 行和 80 列)。我面临这个问题。通过将 setwinsize(24,80) 更改为 setwinsize(24,150),它可以正常工作。

相关内容