Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: STDOUT und STDERR synchronisieren

2 views
Skip to first unread message

Tobias Nissen

unread,
Oct 21, 2009, 11:19:00 AM10/21/09
to
Tobias Nissen wrote:
> Ich stehe gerade aufm Schlauch. Ich möchte gerne STDOUT und STDERR
> synchronisieren, d.h. Ausgaben[0]
[...]
> [0] also a la
> print "foo"
> bzw.
> print STDERR "bar"

Wobei auch mal

die "bar"

zum Einsatz kommt. Aber das sollte doch was die Ausgabe angeht
äquivalent zu

print STDERR "bar"

sein, oder?

Tobias Nissen

unread,
Oct 21, 2009, 11:16:11 AM10/21/09
to
Moin!

Ich stehe gerade aufm Schlauch. Ich möchte gerne STDOUT und STDERR

synchronisieren, d.h. Ausgaben[0] sollen in der Reihenfolge auf
der Console (Debian Squeeze, Perl 5.10.0 built for i486-linux-gnu-
thread-multi) erscheinen, wie sie vom Programm herausgeschrieben
werden. Ich war immer der Meinung es würde dafür reichen, am Anfang
des Programms ein

$| = 1;

zu machen. Denn das Durcheinanderwürfeln der Meldungen liegt doch
daran, dass STDOUT gepuffert wird und STDERR nicht. Oder habe ich da
was missverstanden? (Anscheinend, sonst würd's ja funktionieren...)

Oder ist das gar nicht Perl's Schuld und meine Konsole[1] mischt da
STDOUT und STDERR?

Was ich nicht möchte, ist STDERR und STDOUT zusammenzulegen. Ich will
schon noch an der Kommandozeile mit

./script 1>stdout.out 2>stderr.out

filtern können.

Was kann man da machen?

Schöne Grüße!
Tobias

[0] also a la
print "foo"
bzw.
print STDERR "bar"

[1] urxvt mit bash

Frank Seitz

unread,
Oct 21, 2009, 3:42:38 PM10/21/09
to
Tobias Nissen wrote:
>
> Ich stehe gerade aufm Schlauch. Ich m�chte gerne STDOUT und STDERR

> synchronisieren, d.h. Ausgaben[0] sollen in der Reihenfolge auf
> der Console (Debian Squeeze, Perl 5.10.0 built for i486-linux-gnu-
> thread-multi) erscheinen, wie sie vom Programm herausgeschrieben
> werden. Ich war immer der Meinung es w�rde daf�r reichen, am Anfang

> des Programms ein
>
> $| = 1;
>
> zu machen. Denn das Durcheinanderw�rfeln der Meldungen liegt doch

> daran, dass STDOUT gepuffert wird und STDERR nicht. Oder habe ich da
> was missverstanden? (Anscheinend, sonst w�rd's ja funktionieren...)

>
> Oder ist das gar nicht Perl's Schuld und meine Konsole[1] mischt da
> STDOUT und STDERR?
>
> Was ich nicht m�chte, ist STDERR und STDOUT zusammenzulegen. Ich will

> schon noch an der Kommandozeile mit
>
> ./script 1>stdout.out 2>stderr.out
>
> filtern k�nnen.

>
> Was kann man da machen?

Wenn Du STDOUT und STDERR ungepuffert ausgibst, sollten die
Ausgaben in chronologischer Reihenfolge erscheinen.
Beschreib mal genauer, was bei dir passiert.

Gr��e
Frank
--
Dipl.-Inform. Frank Seitz
Anwendungen f�r Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Homepage: http://www.fseitz.de/
XING-Profil: http://www.xing.com/profile/Frank_Seitz2

Tobias Nissen

unread,
Oct 21, 2009, 5:36:10 PM10/21/09
to
Frank Seitz wrote:
[...]

> Wenn Du STDOUT und STDERR ungepuffert ausgibst, sollten die
> Ausgaben in chronologischer Reihenfolge erscheinen.
> Beschreib mal genauer, was bei dir passiert.

In etwa das:

...
$|=1;
...
print "foo"
...
die "bar"
...

Und die Ausgabe ist dann

bar at ...
foo

Obwohl ich

foo
bar at ...

wollte. Muss ich denn bei STDERR auch explizit auf ungepufferte Ausgabe
umstellen? Ich dachte das ist standardmäßig an. Habe das Skript erst
morgen wieder vor Augen, dann versuche ich das mal.

Frank Seitz

unread,
Oct 21, 2009, 9:33:31 PM10/21/09
to

Also bei mir kommt das raus, was ich erwarte:

#!/usr/bin/perl

use strict;
use warnings;

$| = 1;
print "foo";
die "bar";

__END__
foobar at ./test.pl line 8.

Grüße


Frank
--
Dipl.-Inform. Frank Seitz

Anwendungen für Ihr Internet und Intranet

0 new messages