I'm new to Perl and want to know of a way to run an external command (call it prg
) in the following scenarios:
prg
, get its stdout
only.prg
, get its stderr
only.prg
, get its stdout
and stderr
, separately.You can use the backtics to execute your external program and capture its stdout
and stderr
.
By default the backticks discard the stderr
and return only the stdout
of the external program.So
$output = `cmd`;
Will capture the stdout
of the program cmd and discard stderr
.
To capture only stderr
you can use the shell's file descriptors as:
$output = `cmd 2>&1 1>/dev/null`;
To capture both stdout
and stderr
you can do:
$output = `cmd 2>&1`;
Using the above you'll not be able to differenciate stderr
from stdout
. To separte stdout
from stderr
can redirect both to a separate file and read the files:
`cmd 1>stdout.txt 2>stderr.txt`;