使用Perl的`IPC :: System :: Simple:runx`时,如何避免打印到STDOUT?

时间:2010-09-17 08:01:02

标签: perl system stdout

我正在使用IPC::System::Simple:runx来执行系统命令并在意外的返回值上死掉。问题是命令输出打印到shell。

  1. 如何避免打印 输出
  2. 如何避免打印此输出 但是把它变成了一个perl变量?
  3. 更新

    3)如果执行失败,如何打印此输出?

2 个答案:

答案 0 :(得分:2)

capture()命令?或者capturex()。

引自链接:

异常处理

如果命令返回意外状态,则run和capture都会抛出异常,如果没有捕获,则会终止程序并显示错误。

捕获异常非常简单:

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

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

有关详细信息,请参阅下面的诊断部分。

答案 1 :(得分:0)

如果模块表现得非常恶劣并直接打印到STDOUT,您可以随时将STDOUT重定向到其他位置。这种黑客攻击,但有些模块需要它。

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