我对Perl比较新,并一直在搜索与我尝试的内容相关的文档。但是我没有找到任何有用的信息。
我有一个程序,可以在stdout输出信息并在其中插入提示符。我需要编写一个Perl脚本将该信息导出到文件中。
我认为可以使用Expect来实现这个功能,但是第一个提示符后的管道似乎存在问题。
以下是我代码的一部分:
# Run program and compare the output to the BASE file
$cmd = "./program arg1 arg2 arg3 arg4 > $outfile";
my $exp = new Expect;
$exp->spawn($cmd);
BAIL_OUT("couldn't create expect object") if (! defined $exp);
$exp->expect(2);
$exp->send("\n");
对于这种情况,用户只需按“Enter”一次即可。该程序小巧且非常快速——2秒足以达到第一个提示。
输出文件仅包含信息的前半部分。
有人有什么建议,我如何获取第二部分内容?
更新: 我已经通过使用简单的脚本验证了Expect可以工作:
spawn ./program arg1 arg2 arg3 arg4
expect "<Return>"
send "\r"
interact
其中"< Return >"是Perl脚本可以查找的冗长表达式。
注意:我尝试编写了一个期望"< Return >"的Perl脚本...但没有任何区别。
即。
$exp->expect(2, '-re', "<Return>")
有什么想法吗?
更新2:
哇!我意外地找到了解决问题的方法。
所以,我在一些测试代码中犯了一个错别字...
$exp->expect(2);
$exp->send("\r");
$exp->expect(2);
请注意末尾的expect(2)...我不小心留下了它,但它却奏效了!
因此,我试图理解发生了什么。Unix的expect似乎不起作用!看起来Perl中实现的Expect“期望”任何东西...不仅仅是提示?
所以,我给expect提供了另外2秒钟来收集stdout,然后我就能得到所有的东西。
如果有人能够提供更详细的信息,让我了解这里发生了什么,我会很感激的。