Perl: Erfassung von korrekten Rückgabewert von "system" - Befehl

Ich bin ein Anfänger in Perl. Ich habe eine Windows-batch-Skript enthält mehrere NMake-Befehle. Ein vorhandenes Problem mit diesem batch-Skript ist, dass selbst wenn der NMake-Befehl schlägt fehl, während der Ausführung, ERRORLEVEL nicht richtig eingestellt.

Wir werden also nie wissen, ob der Befehl gearbeitet, bis wir analysieren die log-Datei. Ich sah hinein, konnte aber keine Lösung finden. Ich dachte dann, der Umwandlung dieses batch-Skript ein Perl-Skript unter der Annahme, dass trapping Fehler werden leichter, aber es scheint, es ist nicht so einfach 🙂

Immer wenn ich mein Perl-Skript, das 'system' Befehl gibt immer 0 zurück. Ich sah viele verschiedene links, und erkannte, dass die Erfassung der richtigen return-status von 'system' Befehl ist nicht so einfach. Trotzdem habe ich versucht, die Vorschläge, aber die Dinge sind nicht arbeiten. 🙁

Lassen Sie mich erwähnen, dass der NMake-Befehl, der aufgerufen wird, ruft wiederum viele verschiedene Befehle während der Ausführung. Zum Beispiel, die Ausgabe des Befehls, die unten erwähnt werden, die wirft 'fatal error', ist eigentlich ein Teil von einem Perl-Skript (check_dir.pl). Dieser Aufruf von Perl-Skript ist geschrieben in der NMake-Datei selbst.

Wenn ich rufe das Perl-Datei (check_dir.pl) direkt und überprüfen Sie die exit-Wert, bekomme ich ein richtiges Ergebnis, d.h., der Befehl schlägt fehl, und druckt eine nicht-null - exit-Wert (...unerwartet zurückgegeben exit-Wert 2).

Versucht, das Perl-system-Funktion, aber es hat nicht geholfen. Ich verwendete den folgenden code:

system ("nmake /f _nt.mak pack_cd SUB_PLAT=$PLAT DR=$plat 2>&1");

if ( $? == -1 ) {
    print "Command failed to execute: $!\n";
}
elsif ( $? & 127 ) {
    printf "The child died with signal %d, %s a coredump\n",
    ( $? & 127 ), ( $? & 128 ) ? 'with' : 'without';
}
else {
    printf "child exited with value %d\n", $? >> 8;
}

Ausgabe:

..... 
..... 
Unable to open dir: R:\TSM_Latest 
Komprimieren...NMAKE : fatal error U1077: 'wenn' : Rückgabe-code "0x2' 
Stop. 
Kind verlassen mit dem Wert 0

Habe auch versucht:

use IPC::System::Simple qw(system);  
my $exit_status = system ("nmake /f _nt.mak pack_cd SUB_PLAT=$PLAT DR=$plat 2>&1");

if ($exit_status != 0) {  
    print "Failure";  
    exit 3;  
} else {  
    print "Success";  
}

Schließlich versucht das folgende Modul:

use IPC::Run qw( run timeout );  
run "nmake /f _nt.mak pack_cd SUB_PLAT=$PLAT DR=$plat 2>&1" or die "NMake returned $?";

Nichts scheint zu funktionieren 🙁

Bitte korrigiert mich, wenn ich die Interpretation der Rückgabewert von system falsch.

InformationsquelleAutor Technext | 2012-05-04

Schreibe einen Kommentar