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 itsstdoutonly. - Run
prg, get itsstderronly. - Run
prg, get itsstdoutandstderr, 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.