【发布时间】:2012-02-21 10:29:18
【问题描述】:
我正在从 perl 脚本(使用 system())中运行一个有时不返回的命令行应用程序,确切地说,它会引发需要用户输入以中止应用程序的异常。该脚本用于自动测试我正在使用 system() 命令运行的应用程序。由于它是自动化测试的一部分,如果发生异常,sytem() 命令必须返回并认为测试失败。
我想编写一段代码来运行这个应用程序,如果发生异常,它必须继续执行脚本,考虑到这个测试失败。
一种方法是运行应用程序一段时间,如果系统调用在这段时间内没有返回,我们应该终止 system() 并继续执行脚本。 (How can I terminate a system command with alarm in Perl?)
实现此目的的代码:
my @output;
eval {
local $SIG{ALRM} = sub { die "Timeout\n" };
alarm 60;
return = system("testapp.exe");
alarm 0;
};
if ($@) {
print "Test Failed";
} else {
#compare the returned value with expected
}
但是这段代码在windows上不起作用我对此做了一些研究,发现SIG不适用于windows(书编程Perl)。 有人可以建议我如何在 Windows 中实现这一目标吗?
【问题讨论】:
标签: perl