|
|
Soucasne zachyceni STDOUT i STDERR (odelene)
|
21.2.2007 11:40
Roman Vašíček
|
u provadeneho prikazu muze byt obcas uzitecne. Lze pouzit napriklad nasledujici kod
use IPC::Open3;
use Symbol qw(gensym);
use IO::File;
# Co se ma spustit a s jakymi parametry
my @command = qw(prikaz param1 param2);
my @result;
sub osExec {
my @cmd = @_;
my $pid;
my $ret;
my @out = ();
my @err = ();
# Vytvorime lokalni handle pro docasne
# soubory k zachyceni STDOUT a STDERR
local *CATCHOUT = IO::File->new_tmpfile;
local *CATCHERR = IO::File->new_tmpfile;
$pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", @cmd);
waitpid($pid, 0);
$ret = $? >> 8;
seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
@out = <CATCHOUT>;
@err = <CATCHERR>;
return($ret, \@out, \@err);
}
@result = osExec(@command);
Vysledkem volani funkce osExec je pole jenz obsahuje navratovou hodnotu, zachyceny standardni vystup a chybovy vystup. Nevyhodou tohoto reseni je nacteni veskereho vystupu do promennych coz muze byt problem pokud spousteny program vyprodukuje opravdu velke mnozstvi dat. |
|
|
|
|
KOMENTARZE
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
|
Szukanie oprogramowania
|
©Pavel Kysilka - 2003-2024 |
maillinuxsoft.cz | Design:
www.megadesign.cz
|