Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9091[/thread]

Log::Handler: binmode, utf8 (Seite 2)

Leser: 2


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
sid burn
 2007-06-16 17:52
#77557 #77557
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=opi,15.June.2007, 22:23]hier ein simples Beispiel:

Code: (dl )
1
2
3
4
open my $fh, '>', 'file.log' or die $!;
print $fh "hello world\n" or die $!;
system('rm -f file.log && touch file.log');
print $fh "hello world\n" or die $!;


Das 2. print funktioniert natürlich nicht, da es nicht mehr die gleiche
Datei ist. Im Log::Handler gibt es die Option reopen. Mit dieser Option
prüfe ich vor jeder Schreiboperation die Inode und wenn sie sich geändert
hat, dann öffne ich die Datei neu. Auf Windows geht das leider nicht.

Wie kann ich sicherstellen, das das Filehandle zur Datei "passt"?[/quote]
Also erstens Funktioniert das Skript. Und zweitens hast du anscheind nicht verstanden wie Unix Dateien verwaltet. :p

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use warnings;
use strict;

open my $fh, '+>', 'file.log' or die $!;
print $fh "Hallo, Welt!\n" or die $!;
system('rm -f file.log && touch file.log');
print $fh "Hallo, Welt!\n" or die $!;

seek $fh, 0, 0;
print <$fh>;

close $fh;


Dieses Skript gibt wie es sollte zwei mal "Hallo, Welt!" aus...

Das file.log nachher Leer ist, ist klar, da es eine andere Datei ist, aber $fh in deinem Programm zeigt immer noch auf deine alte Datei...

Mit "rm" löscht du halt keine Datei du entfernst halt nur ein Link...\n\n

<!--EDIT|sid burn|1182001990-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
bloonix
 2007-06-16 18:54
#77558 #77558
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sid burn,16.06.2007, 15:52]Also erstens Funktioniert das Skript. Und zweitens hast du anscheind nicht verstanden wie Unix Dateien verwaltet. :p[/quote]
Eh', sei mal net so vorlaut! Entweder hast du nicht richtig nachgelesen
oder du willst den opi einfach mal ein wenig necken. :D

Nicht ohne Grund habe ich erwähnt, dass ich auf unixoiden Systemen die
Inode überprüfe. Auf diese Weise kann ich sicherstellen, dass eine Datei
zwischen zwei Schreibzugriffen immer noch die gleiche Datei ist. Das
zweite print funktioniert eben nicht in dem Sinne, dass es in die aktuelle
Logdatei schreiben soll - wie auch...

[quote=sid burn,16.06.2007, 15:52]Das file.log nachher Leer ist, ist klar, da es eine andere Datei ist, aber $fh in deinem Programm zeigt immer noch auf deine alte Datei...

Mit "rm" löscht du halt keine Datei du entfernst halt nur ein Link...[/quote]
Eben das ist ein trifftiger Grund zu testen, ob das Logfile noch das gleiche
ist, ansonsten läuft das Filesystem voll und man findet den Übeltäter nicht!

Aber wie könnte man das auf Windows machen, ohne immer das Logfile
für jeden Schreibzugriff erneut zu öffnen?\n\n

<!--EDIT|opi|1182005827-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
RPerl
 2007-06-16 19:41
#77559 #77559
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Du willst pruefen ob sich eine Datei veraendert hat?

CPAN:Digest::MD5::File

CPAN:Digest::MD5
bloonix
 2007-06-16 19:56
#77560 #77560
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=RPerl,16.06.2007, 17:41]CPAN:Digest::MD5::File

CPAN:Digest::MD5[/quote]
Glaubst du das klappt, wenn ca. 20 Prozesse in das gleiche Logfile schreiben? :)

Ich stelle mir das zudem sehr rechenintensiv vor, wenn vor und nach
jeder Schreibaktion die md5sum berechnet wird :)\n\n

<!--EDIT|opi|1182009539-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
RPerl
 2007-06-16 19:58
#77561 #77561
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Naja, wusste nicht das es eine so große Sache ist.
Einen Versuch ists wohl durchaus wert. Wobei es bestimmt resourcenunfreundlich wird :D
bloonix
 2007-06-16 20:02
#77562 #77562
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
ich denke einfach mal, das es auf windows nicht anders geht. leider.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
moritz
 2007-06-16 21:23
#77563 #77563
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Ich würde erwarten, dass ich alle Log-Messages im internen Format von Perl übergebe (also vorher durch Encode::encode gejagt habe, falls es nötig ist), und dass ich einen beliebigen Charset für die Lodatei angebe, und in dem geschrieben wird - sprich: alle Ausgaben sollten vor dem Schreiben durch Encode::decode($charset, $string) gejat werden.

Das sollte eigentlich genügend flexibel sein, und auf anderen Seite auch nicht allzu schwer zu implementieren.
betterworld
 2007-06-16 23:51
#77564 #77564
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=opi,16.06.2007, 16:54]Eben das ist ein trifftiger Grund zu testen, ob das Logfile noch das gleiche
ist, ansonsten läuft das Filesystem voll und man findet den Übeltäter nicht!

Aber wie könnte man das auf Windows machen, ohne immer das Logfile
für jeden Schreibzugriff erneut zu öffnen?[/quote]
Ich dachte, unter Windows kann man eine Datei nicht umbenennen oder loeschen, waehrend sie noch geoeffnet ist.  Das hatten wir hier iirc neulich in einem anderen Thread. Also sollte es unter Windows gar nicht noetig sein, da etwas zu ueberpruefen.\n\n

<!--EDIT|betterworld|1182023508-->
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-06-15 14:51.