等待期望-直到生成的程序完成

时间:2018-11-08 00:16:37

标签: regex perl unix expect exit

我试图使用Expect在Perl中的自动化脚本中生成程序。

我正在尝试决定如何等待该程序完成,因为  -我不能依赖任何匹配的字符串,因为程序与退出方式不一致  -我希望等待,直到看到用户提示并且用户得到控制为止。

是否有任何方法可以在用户提示符下不执行正则表达式?我可以依靠的所有标志或退出代码都告诉用户现在可以控制。

谢谢

1 个答案:

答案 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),因为该过程已在处理程序中获得。