Tipps und Tricks zu Perl und CPAN-Modulen

Standard-Ausgabe aufzeichnen mit IO::Capture::Stdout

Beitrag von Uwe am 12.03.2007 um 08:30 Uhr | 0 Kommentare

Wenn man die Standard-Ausgabe eines externen Programms (oder Perl-Skripts) aufzeichnen möchte, kann man u. a. Backticks (`...`) verwenden. Ich würde in diesem Fall lieber zu IPC::Run3 greifen (aber dazu mehr in einem späteren Beitrag).

Handelt es sich bei dem auszuführenden Programm-Code jedoch um ein Perl-Modul und es kann vielleicht nicht als externer Prozeß gestartet werden (z. B. weil es eine lange Initialisierungsphase hat), dann kommt IO::Capture::Stdout ins Spiel:

#!/usr/bin/perl

use warnings;
use strict;

use Data::Dumper;
use IO::Capture::Stdout;


# Aufzeichnung beginnen
my $capture = IO::Capture::Stdout->new;
$capture->start;

# hier jetzt zu "ueberwachenden" Code ausfuehren
{
    print "Erstelle Datenstruktur\n";
    my $data = {a => 1, b => 2, c => 3};

    print Dumper($data);
}

# Aufzeichnung beenden
$capture->stop;

print "Es wurde aufgezeichnet:\n";
print "=======================\n";
print join('', $capture->read);

Download: capture-stdout.pl

Nachdem ein IO::Capture::Stdout-Objekt angelegt wurde, kann mit start() und stop() die Aufzeichnung begonnen bzw. angehalten werden. Im Anschluß kann mit read() die Standard-Ausgabe gelesen werden.

Mit IO::Capture::Stderr steht ein Modul zum Aufzeichnen der Standard-Fehlerausgabe zur Verfügung. IO::Capture::Extended erweitert die beiden um zusätzliche Funktionalität (Mustererkennung, Anzahl Linien und Ausgaben).


Kommentar abgeben