Perl STDOUT STDERR visszaolvasása

Adott egy perl kód, aminek többek közt annyi a dolga, hogy "elkészíti" egy rakás különböző parancs argumentumát, majd végrehajtja őket.

A végrehajtandó parancsok különböző visszatérési értékeit és kimeneteit kell kezelni (exit code, stdout, stderr), köztük van olyan parancs, ami mindig nullával jön vissza, ott az stderr-t kell figyelni, hogy mit ír ki. Tehát fincsi.

Az alábbi kóddal oldom most meg, de nem mondanám, hogy el vagyok tőle ájulva. Jobb megoldást viszont perlben nem találtam.

Úgy rémlik, Pythonban van erre builtin, akinek azzal van tapasztalata, megoszthatná, mert lehet, hogy átírom az egészet perlről pythonba inkább.

Köpködjétek meg lécci, hátha valaki tud jobbat:

		
$cmd_exit = system( "@cmd 1>$self->{file_stdout} 2>$self->{file_stderr}" ) ;  
# Csodálatos, nem?   Itt: ^           ...és itt: ^

# Standard OUT visszaolvasása
open (CMDOUT, "<", $self->{file_stdout}) ; 
while (<CMDOUT>) {
	chomp $_ ;
	push @stdout, $_ ;
}
close CMDOUT ;

# Ugyanez a standard ERROR-ra, a @stderr tömbbe:
# ...
	push @stderr, $_ ;
# ...

return $cmd_exit, \@stdout, \@stderr ;

Betoltam pastebinbe, hogy legyen szép színe.

Hozzászólások

Pedig szerintem ez a módja Perl-ben. A qx -et tudnád még használni, ha csak a STDOUT vagy csak a STDERR vagy a kettő egybe kéne, de hogy a kettő szeparáltan kell, így nem nagyon látok más megoldást.
Csaba

> die

Azért nem die-oltatom el a szkriptet, mert nem tud visszaolvasni egy kimenetet. A lényeg, hogy a parancs lefusson. De még lesz ez finomítva, valószínű előtte tesztelem, hogy a fájlok írhatók-e, aztán hadd szóljon. Majd trace-elem, hogy mi történik ha olyan filehandle-el dolgozok, amit nem sikerült megnyitni. Mivel csak olvasásról van szó, gondolom nem sok minden.

> my @stdout= < CMDOUT >

Haha, nekem is lenyelte fentebb. Ez se rossz megoldás, de amit én írtam az a standard perlben, és van egy tippem is, hogy miért.

Vagy postfix-szel: push @stdout, $_ foreach (< CMDOUT >) ; chomp @stdout ;

> chomp @stdout;

Ez jó! Gyanítom jóval gyorsabb is.

--
2e845cb4c3a5b5bd6508455b1739a8a2

Ötlet még jöhet, aztán nekiállok kísérletezni, melyik a legmegfelelőbb nekem. A témában érdemes elolvasni ezt a pár sort.
--
2e845cb4c3a5b5bd6508455b1739a8a2