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).