PerlExpect.pmexpect()异常、

xiaoxiao2021-02-28  92

$exp->Expect::spawn(....); $exp->send(cmd); $exp->expect($timeout ,'-re',$prompt); 如果命令的输出非常多时,Expect会一组一组的将返回结果读取到缓存中 每次读取2048个字节。 每次读取完就追加到缓存,然后用缓存的数据匹配 p r o m p t ; 因 为 每 次 都 是 读 取 一 部 分 便 来 匹 配 , 那 么 就 会 出 现 c m d 的 输 出 没 有 读 完 , 但 是 prompt ; 因为每次都是读取一部分便来匹配,那么就会出现cmd的输出没有读完,但是 prompt便cmdprompt却匹配上了,而结束expect。

看起来也很合理,但是如果我们的 $prompt 里面有’$'结尾符号时,这种匹配方式就会出问题。 如:$prompt = '[\$%#>]\s*$' 那么匹配到的就未必是我们想要的东西。

在Net::SSH::Expect里面也存在这个问题,因为SSH这个包底层就是调用的Expect.pm

解决方法: 连续发送两条命令,第二次发送一个静态的数据,(echo SSH_TEST_CMD) ,先等待“SSH_TEST_CMD’’,再等待$prompt


转载请注明原文地址: https://www.6miu.com/read-82961.html

最新回复(0)