Leser: 25
1 2 3 4 5
my $res=system("psexec \\\\$fcserver -u $loginname -p $passwordcopytoserver -f -c getevents.exe $fceinDate"); if ($res!=0) { warn "Es ist ein Fehler aufgetretten copytoserver:\n richtiger Servername?\n richtiger Login?\n Verbindung zum Server? ."; }
open(STDERR, '>', 'NUL');
2011-01-19T11:06:11 FIFODann am besten gleich ins NULL Device:
Code (perl): (dl )open(STDERR, '>', 'NUL');
edit: Bezieht sich natürlich auf Win32 wie beim OP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use warnings; use strict; # altes Handle sichern open my $old_stderr, ">&STDERR"; # STDERR ins Nirwana weisen open(STDERR, '>', 'NUL') or die $!; warn 'invisible!'; # ... # STDERR wieder zurücksetzen open STDERR, '>&', $old_stderr; warn 'STDERR resurrected!';
2011-01-19T14:55:33 LukeStriker2 Fragen
1. Wie deaktiviert man das wieder? Ich will ja nur für einen bestimmten Bereich keine Fehler sehen...
2. Wenn irgendwo im Script ein Fehler passiert, kommen noch gefühlte 1000 Fehler vom TK Modul. Kann man die für ein bestimmtes Modul abfangen? Wenn ja wie genau?
2011-01-19T15:41:34 FIFO2011-01-19T14:55:33 LukeStriker2 Fragen
1. Wie deaktiviert man das wieder? Ich will ja nur für einen bestimmten Bereich keine Fehler sehen...
2. Wenn irgendwo im Script ein Fehler passiert, kommen noch gefühlte 1000 Fehler vom TK Modul. Kann man die für ein bestimmtes Modul abfangen? Wenn ja wie genau?
1. vgl. Gwen und neue Kommentare im Posting oben
2. wenn es um warnings geht, kann man die im Code mit no warnings; unterdrücken (z.B. für einen bestimmten Code-Block). Man kann auch eigene Handler für $SIG{__WARN__} schreiben. Ist selten zielführend, besser man fragt sich, warum die ganzen Meldungen auftauchen und beugt entsprechend vor. Gezielt die Meldungen eines bestimmten Moduls zu blockieren dürfte kaum ohne weiteres möglich sein. Wer so fortgeschritten programmieren kann, kommt dann auch mit ein paar (oder 1000) warnings klar :-)
1 2 3 4 5 6 7 8 9
# Fehlermeldungen unterdrücken open(STDERR, '>', 'NUL') or die $!; my $res=system("psexec \\\\$fcserver -u $loginname -p $passwordcopytoserver -f -c getevents.exe $fceinDate"); # STDERR wieder zurücksetzen, Fehlermeldung aktivieren open STDERR, '>&', $xyz; if ($res!=0) { warn "Es ist ein Fehler aufgetretten copytoserver:\n richtiger Servername?\n richtiger Login?\n Verbindung zum Server? ."; } #Wenn ein Fehler in der obrigen Zeile auftritt dann diese Meldung in der Console ausgeben
1 2 3 4 5 6 7 8 9 10 11 12
# altes Fehlerhandle sichern open my $failhandle, ">&STDERR"; # Fehlermeldungen unterdrücken open(STDERR, '>', 'NUL') or die $!; my $res=system("psexec \\\\$fcserver -u $loginname -p $passwordcopytoserver -f -c getevents.exe $fceinDate"); # STDERR wieder zurücksetzen, Fehlermeldung aktivieren open STDERR, '>&', $failhandle; if ($res!=0) {die "Es ist ein Fehler aufgetretten beim ausfuehren von getevents.exe auf $fcserver:\n1.NET-Framework auf $fcserver?\n2.richtiger Servername/Login/Passwort?($fcserver $loginname)\n3.Verbindung zum Server?\n";}
2011-01-25T08:11:31 LukeStrikerNatürlich arbeite ich mit use strict hab $xyz ne Zeile weiter oben deklariert.
funktioniert, danke ;)
2011-01-25T11:17:58 FIFO2011-01-25T08:11:31 LukeStrikerNatürlich arbeite ich mit use strict hab $xyz ne Zeile weiter oben deklariert.
funktioniert, danke ;)
Schön, aber was ist jetzt anders als vorher?
edit: Ich glaube, ich verstehe: Du meinst nur meine Fehlermeldungen ...
Bzgl. Tk: Hast Du mal Tk::Error angeschaut? Du kannst die Tk-Fehler auf eine eigene sub umbiegen:
Gruß FIFO
1 2 3 4 5 6 7 8 9 10 11 12 13
use strict; use warnings; my $Server = 'test123'; my $searched = "//$Server/LMachine/SOFTWARE/Microsoft/.NETFramework/policy"; use Win32::TieRegistry( Delimiter=>"#", ArrayValues=>0 ); my $delim = $Registry->Delimiter("/"); my $remoteKey = $Registry->{$searched} or die "Can't read $searched key; \nERROR: $^E\n"; foreach my $subKey ( $remoteKey->SubKeyNames ) { print "Installed is $subKey\n" if $subKey =~ /v\d+/; }
my $res=system("psexec \\\\$fcserver -u $loginname -p $passwordcopytoserver -f -c getevents.exe $fceinDate 2>NUL");
2011-01-19T11:08:04 GwenDragonAusgabe auf STDERR wegwerfen:
Code (perl): (dl )my $res=system("psexec \\\\$fcserver -u $loginname -p $passwordcopytoserver -f -c getevents.exe $fceinDate 2>NUL");
2011-01-19T11:08:04 GwenDragonAusgabe nach STDERR "wegwerfen":
Code (perl): (dl )my $res=system("psexec \\\\$fcserver -u $loginname -p $passwordcopytoserver -f -c getevents.exe $fceinDate 2>NUL");