【发布时间】:2011-04-13 14:41:36
【问题描述】:
我正在使用IPC::System::Simple:runx 来执行系统命令并死于意外的返回值。问题是命令输出被打印到shell。
- 如何避免打印此内容 输出?
- 如何避免打印此输出 但是将其放入 perl 变量中?
更新
3) 如果执行失败,我如何打印此输出?
【问题讨论】:
我正在使用IPC::System::Simple:runx 来执行系统命令并死于意外的返回值。问题是命令输出被打印到shell。
更新
3) 如果执行失败,我如何打印此输出?
【问题讨论】:
capture() 命令?或者 capturex()。
引用自链接:
异常处理
在命令返回意外状态的情况下,run 和 capture 都会抛出异常,如果没有被捕获,将终止你的程序并报错。
捕获异常很容易:
eval {
run("cat *.txt");
};
if ($@) {
print "Something went wrong - $@\n";
}
有关详细信息,请参阅下面的诊断部分。
【讨论】:
capture 是否与 runx 相同(socu 表示 catpure 的作用类似于反引号,而 run 的作用类似于 system)?我可以打印仅在失败时捕获的内容吗?
capturex 默认情况下完全符合我的要求:如果一切正常,它会保持沉默,如果发生错误(即意外的返回值等),它会死掉,但首先会打印命令的输出以及它自己的消息。太好了!
如果一个模块确实表现得非常糟糕并且直接打印到 STDOUT,你总是可以将 STDOUT 重定向到其他东西。这种 hack 但有些模块需要它。
# 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");
【讨论】: