Schrift
[thread]7904[/thread]

system-Funktion: Fehler abfangen

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
galaxy
 2006-04-18 21:53
#65054 #65054
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte bei der Funktion system, sofern ein Fehler auftritt gezielt darauf reagieren.

Jedoch klappt das nicht so richtig: Ausgeführt werden soll der Oracle SQL-Loader.

if(!system $sql_loader_command)
{
print "jo et gab en Fehler";
}

Wenn dieser Loader eine Fehlermeldung zurück liefert, dann wird mir nicht der eingelammerte Teil angezeigt.

Kann mir jemand helfen?

Danke für Tipps
renee
 2006-04-18 21:57
#65055 #65055
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
system liefert unterschiedliche Werte zurück, je nachdem, was das aufgerufene Programm für einen Exit-Code hatte.

Fehlerabfrage bei system sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
                @args = ("command", "arg1", "arg2");
system(@args);

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


Aus: perldoc -f system
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
galaxy
 2006-04-19 10:07
#65056 #65056
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Genau diesen Abschnitt hatte ich auch gelesen. Jedoch verstehe ich diesen nicht wirklich.

Was soll ich den Bitte in diese Zeile eintragen ?
@args = ("command", "arg1", "arg2");

Der von mir ausgeführte Befehl ist in genau einer Variablen gespeichert und es werden keine Argumente übergeben.

Des Weiteren verstehe ich gar nicht wo die Varibale $? herkommt.
Was soll diese, und wo welche bedeutung kommt den Zahlen -1, & 127, & 128 zugute?

Danke für Tipps\n\n

<!--EDIT|galaxy|1145426898-->
master
 2006-04-19 11:01
#65057 #65057
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
@args = ("command", "arg1", "arg2");
system(@args);


ist eine etwas ungückliche namensgebung.

@galaxy..
dann lass eben
"arg1" und "arg2" einfach weg..

Code: (dl )
1
2
@returns = ("command");
system(@returns);
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
galaxy
 2006-04-19 11:26
#65058 #65058
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Ok. Das hab ich soweit. Aber wo kommt die Variable $? her?
und welche bedeutung kommt den Zahlen -1, & 127, & 128 zugute?

Danke für Tipps
Crian
 2006-04-19 12:01
#65059 #65059
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
In dem Fehlerwert $? sind mehrere Informationen gemeinsam abgelegt. Die im Perldoc gezeigte Möglichkeit nimmt diese wieder auseinander.\n\n

<!--EDIT|Crian|1145433718-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
vayu
 2006-04-19 12:02
#65060 #65060
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
perldoc perlvar

Quote
$? The status returned by the last pipe close, backtick (``) com-
mand, successful call to wait() or waitpid(), or from the sys-
tem() operator. This is just the 16-bit status word returned
by the wait() system call (or else is made up to look like it).
Thus, the exit value of the subprocess is really ("$? >> 8"),
and "$? & 127" gives which signal, if any, the process died
from, and "$? & 128" reports whether there was a core dump.
(Mnemonic: similar to sh and ksh.)
master
 2006-04-19 12:20
#65061 #65061
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
127, 128, -1  ist eine Zahl die nur 1 Byte gross ist bzw. geht ja von -128 bis ca. 128 (positiv) oder alternativ kann man zahlen von 0 bis 255 darstellen.

ich denke man wollte sehr deutlich unterscheiden zwischen -1
und den beiden 127 und 128. Bedeutung siehe vayu.\n\n

<!--EDIT|master|1145434906-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
docsnyder
 2006-04-19 16:23
#65062 #65062
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@master

Quote
... ist eine Zahl die nur 1 Byte gross ist bzw. geht ja von -128 bis ca. 128 (positiv) oder alternativ kann man zahlen von 0 bis 255 darstellen.


Stimmt so nicht ganz: von -128 bis 128 sind es (einschließlich der Null) 257 Werte und die kann man nicht mit 8 Bit kodieren. Daher geht die Darstellung negativer Zahlen nur bis -127 ;o)

Das nur am Rande.

Gruß, Doc\n\n

<!--EDIT|docsnyder|1145449409-->
master
 2006-04-19 17:19
#65063 #65063
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
jo darum habe ich auch "ca" geschrieben.. wusste es nicht mehr genau auswendig... meistens nutzt man ja eh 0-255 (256 möglichkeiten inkl. null).

Trotzdem danke für die korrektur.
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-04-18 21:53.