Perl Expect.pm expect()异常、

8 篇文章 0 订阅

$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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值