How can I run an external command and capture its output in Perl?
perl, stderr, stdout
Solution
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`;
Problem
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 its `stdout` only. - Run `prg`, get its `stderr` only. - Run `prg`, get its `stdout` and `stderr`, separately.