Ich führe eine Kommandozeilenanwendung aus dem Perl-Skript heraus aus (unter Verwendung von system()), die manchmal nicht zurückkehrt, um genau zu sein, wirft sie eine Ausnahme, die die Benutzereingabe erfordert, um die Anwendung abzubrechen. Dieses Skript wird für automatisierte Tests der Anwendung verwendet, die ich mit dem system()-Befehl ausführe. Da es sich um einen Teil der automatisierten Tests handelt, muss der system()-Befehl zurückkehren, wenn die Ausnahme auftritt und der Test als fehlgeschlagen betrachtet wird.
Ich möchte ein Codestück schreiben, das diese Anwendung ausführt, und wenn eine Ausnahme auftritt, muss das Skript fortgesetzt werden, wobei dieser Test als fehlgeschlagen betrachtet wird.
Eine Möglichkeit, dies zu tun, besteht darin, die Anwendung für eine bestimmte Zeit laufen zu lassen, und wenn der Systemaufruf in dieser Zeit nicht zurückkehrt, sollten wir das system() beenden und mit dem Skript fortfahren. ( Wie kann ich in Perl einen Systembefehl mit Alarm beenden? )
Code, um dies zu erreichen:
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
}
aber dieser Code funktioniert nicht unter Windows. Ich habe einige Nachforschungen angestellt und herausgefunden, dass SIG nicht für Windows funktioniert (Buch Programmierung Perl). Könnte jemand vorschlagen, wie ich dies unter Windows erreichen kann?