我试图使用Expect在Perl中的自动化脚本中生成程序。
我正在尝试决定如何等待该程序完成,因为 -我不能依赖任何匹配的字符串,因为程序与退出方式不一致 -我希望等待,直到看到用户提示并且用户得到控制为止。
是否有任何方法可以在用户提示符下不执行正则表达式?我可以依靠的所有标志或退出代码都告诉用户现在可以控制。
谢谢
答案 0 :(得分:2)
未说明Expect
的用途是什么,或程序可能如何指示退出。
假设在某一时刻交互停止并且我们仅等待程序退出,则可以使用expect(undef)
use warnings;
use strict;
use feature 'say';
use Expect;
my $cmd = 'ls -l ./ | head -5; sleep 3';
my $exp = Expect->spawn( $cmd );
say "Started process ", $exp->pid;
$exp->raw_pty(1);
$exp->log_stdout(0);
# ...
$exp->expect(undef);
say "Program exited with status ", $exp->exitstatus;
say $exp->before;
如果程序无法通信后没有输出,请删除before
。
另一种方法是设置一个$SIG{CHLD}
信号处理程序,在其中检查程序的PID,并设置一个标志,然后其他代码可以检查该标志。 PID位于变量中,该变量需要在处理程序之前声明,然后在进程启动后使用pid
方法进行设置,因此在处理程序中使用是合法的(在strict
下),设置处理程序运行的时间。
然后exitstatus
无效(-1
),因为该过程已在处理程序中获得。