我正在使用IPC::System::Simple:runx
执行系统命令并死于意外的返回值。问题是命令输出被打印到shell。如何在使用Perl的`IPC :: System :: Simple:runx`时避免打印到标准输出?
- 如何避免打印此 输出?
- 如何避免打印此输出 ,但将其变为perl变量?
UPDATE
3)我怎么能当且仅当执行失败打印此输出?
我正在使用IPC::System::Simple:runx
执行系统命令并死于意外的返回值。问题是命令输出被打印到shell。如何在使用Perl的`IPC :: System :: Simple:runx`时避免打印到标准输出?
UPDATE
3)我怎么能当且仅当执行失败打印此输出?
capture()命令?或者capturex()。
从链接引用:
异常处理
在命令返回意外状态,对运行和捕捉将抛出一个异常,如果不抓住会终止你的程序有一个的情况下错误。
捕获异常很简单:
eval {
run("cat *.txt");
};
if ([email protected]) {
print "Something went wrong - [email protected]\n";
}
请参阅下面的诊断部分的更多细节。
如果一个模块的行为非常恶劣并直接打印到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");
谢谢,但'capture'等同于'runx'尽可能的执行阶段(SOCU说,'catpure'就像反引号,而'run'就像'system')?我可以打印仅在失败时捕获的内容吗? – 2010-09-17 08:17:07
查看我刚刚编辑的内容。 – colithium 2010-09-17 08:24:15
谢谢。显然'capturex'默认情况下完全符合我的要求:如果一切顺利,它是无声的,如果发生错误(即意外返回值等),它会死掉,但首先打印命令的输出以及它自己的消息。大! – 2010-09-17 11:49:20