开发者

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

开发者 https://www.devze.com 2023-01-16 07:34 出处:网络
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.

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 a开发者_如何学运维void 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?


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.


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");
0

精彩评论

暂无评论...
验证码 换一张
取 消