我想编写一段运行此应用程序的代码,如果发生异常,则必须继续使用脚本,因为此测试失败了.
一种方法是运行应用程序一段时间,如果系统调用没有在那段时间内返回,我们应该终止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中实现这一目标?
use Win32::Process;use Win32;sub ErrorReport{ print Win32::FormatMessage( Win32::GetLastError() );}Win32::Process::Create($ProcessObj,"C:\path\to\testapp.exe","",norMAL_PRIORITY_CLASS,".")|| dIE ErrorReport();if($ProcessObj->Wait(60000)) # Timeout is in milliseconds{ # Wait succeeded (process completed within the timeout value)}else{ # Timeout expired. $! is set to WAIT_Failed in this case}
您也可以睡眠适当的秒数,并在此模块中使用kill方法.我不确定norMAL_PRIORITY_CLASS创建标志是否是您要使用的标志;这个模块的文档非常糟糕.我看到一些使用DETACHED_PROCESS标志的例子.你将不得不玩这个部分,看看有什么作用.
总结以上是内存溢出为你收集整理的perl – 在Windows中经过一段时间后终止系统()全部内容,希望文章能够帮你解决perl – 在Windows中经过一段时间后终止系统()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)