I'm new to Perl and want to know of a way to run an external command (call it prg
) in the following scenarios:
- Run
prg
, get itsstdout
only. - Run
prg
, get itsstderr
only. - Run
prg
, get itsstdout
andstderr
, separately.
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`;
You can use qx/STRING/
(or backticks). See Quote-Like Operators in perlop.
You can use IPC::Open3 or IPC::Run. Also, read How can I capture STDERR from an external command from perlfaq8.