Perl Wait bis Programm ende?
Chrisi
- perl
Hi zusammen,
ich bin noch recht neu in sachen Perl und habe eine Frage zum Thema Prozesse, bzw. zum Aufrufen von externen Programmen.
Ich rufe über ein Perl Script Unterprgramme mit system() auf. Nun möchte ich gern das mein Perlscript solange wartet bis der Aufruf von system() durch ist, bzw. das Programm beendet wurde. Muss man dazu mit fork() arbeiten oder kann ich das anders hinbekommen?
Und meine 2. Frage, wie stelle ich fest ob ein Aufruf geglückt ist?
if(system(...) eq 1){
print "Erfolgreich!\n";
}else{
print "Fehler!\n";
}
Die Befehle werden ausgeführt, aber eine 1 gibt system nicht zurück.
Vieleicht hat ja jemand einen Tipp wo ich mir Beispielcode für einen Shell-Wrapper anschauen kann?
Ich danke für jeden Tipp
Chrisi
Hallo,
Ich rufe über ein Perl Script Unterprgramme mit system() auf. Nun möchte ich gern das mein Perlscript solange wartet bis der Aufruf von system() durch ist, bzw. das Programm beendet wurde.
Das macht system() automatisch. Wenn system() *NICHT* auf die Beendigung des Programms wartet, dann heißt das, dass das Programm sich selbst "abkoppelt".
Wenn Du NICHT auf das Beenden des Programms warten willst, DANN musst Du fork() o.ä nutzen.
Und meine 2. Frage, wie stelle ich fest ob ein Aufruf geglückt ist?
system() gibt den "Exit-Code" des Programms zurück (deswegen muss es auch warten, bis es zu Ende ist, sonst kann es den ja nicht kennen). Es ist Konvention, dass ein Programm 0 zurückgibt, wenn es erfolgreich war und eine andere Zahl, wenn es auf ein Problem gestoßen ist.
Ferner: eq in Perl ist ein Stringvergleich, Du willst hier aber Zahlen vergleichen.
Daher sollte folgender Code genau Deine Anforderungen erfüllen:
my $code;
if (($code = system (...)) == 0) {
print "Der Befehl war erfolgreich!\n";
} else {
print "Der Befehl war nicht erfolgreich, Fehlercode $code!\n";
}
Viele Grüße,
Christian
Hi Christian,
danke für deine Hilfe, ich habe in meinem Script soweit alles angepasst und es funktioniert nun prima :-)
Viele Grüße
Chrisi