【发布时间】:2011-07-20 05:10:06
【问题描述】:
我对 Perl 还很陌生,并且一直在互联网上搜索我正在尝试做的事情的文档。我运气不好。
我有一个程序可以将信息输出到标准输出,并带有提示。我需要制作一个 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");
在这种情况下,只有一个提示让用户按下“回车”。这个程序很小而且速度很快 - 2 秒就足以到达第一个提示。
输出文件只包含前半部分信息。
有人对我如何抓住下半场有任何建议吗?
更新: 我已经通过使用一个简单的脚本验证了这适用于 Expect:
spawn ./program arg1 arg2 arg3 arg4
expect "<Return>"
send "\r"
interact
其中“”是 Perl 脚本可以查找的详细表达式。
注意:我已经尝试编写我的 Perl 脚本来期待“”......这没有区别。
即
$exp->expect(2, '-re', "<Return>")
有什么想法吗?
更新2:
哈扎!我找到了解决问题的方法……完全是偶然的。
所以,我写的一些测试代码打错了……
$exp->expect(2);
$exp->send("\r");
$exp->expect(2);
注意尾随的 expect(2)...我不小心把它留在里面了,它起作用了!
所以,我试图了解正在发生的事情。 Unix expect 似乎不能这样工作!看来在 Perl 中实现的 Expect “期望”任何东西......不仅仅是提示?
所以,我提供了另外 2 秒的时间来收集标准输出,我能够得到所有东西。
如果有人可以提供一些关于这里发生的事情的更详细信息,我很想了解发生了什么。
【问题讨论】:
-
您确定需要使用 Expect 吗?这似乎有点矫枉过正,尤其是当您是 perl 新手时。
-
还有其他建议吗?除了这个问题,我没有遇到任何看起来太复杂的问题。