问题与期待,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),它可以正常工作。