在Net::SSH::Expect中访问Expect对象报错,如何正确调用log_file?
解决Net::SSH::Expect中访问Expect对象log_file的错误问题
错误原因
你调用$m->expect->log_file()的方式有误:Net::SSH::Expect的expect()方法是用于等待匹配输出模式的实例方法,并非返回底层Expect对象的 getter 方法。直接不带参数调用$m->expect()会被解释为调用Expect类的expect()函数(而非实例方法),触发了你看到的参数错误。
正确调用方式
Net::SSH::Expect内部提供了_expect_handle()方法,用于获取底层的Expect对象实例,通过它就能正常调用log_file()方法获取文件句柄:
my $m = Net::SSH::Expect->new( host => '192.168.1.6', user => 'root', password => 'password', timeout => 10, raw_pty => 1, log_file => '/tmp/net_ssh_expect_output.txt', ); $m->login(); # 获取底层Expect对象 my $expect_obj = $m->_expect_handle(); # 调用log_file()获取文件句柄 my $log_fh = $expect_obj->log_file();
补充说明
_expect_handle()是Net::SSH::Expect的内部方法,专门用来暴露底层的Expect实例,供用户调用Expect类的原生方法。- 如果需要修改日志文件路径或关闭日志,也可以通过这个Expect对象调用
log_file($new_path)或log_file(undef)来实现。
内容的提问来源于stack exchange,提问作者ZaPaDoS
相关产品推荐
相关产品推荐

