Używam aplikacji wiersza poleceń z poziomu skryptu perl (przy użyciu system()), który czasami nie zwraca, a mówiąc dokładniej, zgłasza wyjątek, który wymaga dane wprowadzane przez użytkownika w celu przerwania aplikacji. Ten skrypt służy do automatycznego testowania uruchomionej aplikacji za pomocą polecenia system(). Ponieważ jest to część testów automatycznych, polecenie sytem() musi zwrócić, jeśli wystąpi wyjątek i uznać test za niepowodzenie.Kończenie systemu() po pewnym czasie w systemie Windows
Chcę napisać fragment kodu uruchamiającego tę aplikację, a jeśli wystąpi wyjątek, należy kontynuować ze skryptem, uważając, że ten test nie powiódł się.
Jednym ze sposobów, aby to zrobić, jest uruchomienie aplikacji przez pewien okres czasu i jeśli wywołanie systemowe nie powróci w tym okresie czasu, powinniśmy zakończyć system() i kontynuować działanie skryptu. (How can I terminate a system command with alarm in Perl?)
koddo osiągnięcia tego celu:
my @output;
eval {
local $SIG{ALRM} = sub { die "Timeout\n" };
alarm 60;
return = system("testapp.exe");
alarm 0;
};
if ([email protected]) {
print "Test Failed";
} else {
#compare the returned value with expected
}
ale ten kod nie działa na windows zrobiłem kilka badań na ten temat i okazało się, że SIG nie działa na Windows (programowanie książki Perl). Czy ktoś może zasugerować, w jaki sposób mogę to osiągnąć w oknach?
Thanks a lot! To działa :) – int80h