David B
David B

Reputation: 29998

How do I avoid printing to STDOUT when using Perl's `IPC::System::Simple:runx`?

I'm using IPC::System::Simple:runx to execute system commands and die on unexpected return values. The problem is that the commands output is printed to the shell.

  1. How can I avoid printing this output?
  2. How can I avoid printing this output but getting it into a perl variable?

UPDATE

3) How can I print this output iff the execution fails?

Upvotes: 2

Views: 411

Answers (2)

tex
tex

Reputation: 2131

If a module does behave very nasty and prints directly to STDOUT you can always redirect STDOUT to something else. This sort of a hack but some modules require it.

# Save STDOUT for restore later
open(OLD_STDOUT, ">>&STDOUT");
open(STDOUT, ">/some/file/or/dev/null");
# call your module
# Restore STDOUT
open(STDOUT, ">>&OLD_STDOUT");

Upvotes: 0

colithium
colithium

Reputation: 10327

The capture() command? Or capturex().

Quoted from link:

Exception handling

In the case where the command returns an unexpected status, both run and capture will throw an exception, which if not caught will terminate your program with an error.

Capturing the exception is easy:

eval {
    run("cat *.txt");
};

if ($@) {
    print "Something went wrong - $@\n";
}

See the diagnostics section below for more details.

Upvotes: 2

Related Questions