从perl中的external * nix命令获取STDOUT,STDERR和响应代码

前端之家收集整理的这篇文章主要介绍了从perl中的external * nix命令获取STDOUT,STDERR和响应代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从我的Perl脚本中执行一个外部命令,将stdout和stderr的输出放入我选择的$变量中,并将命令的退出代码放入$?变量.

我在perlfaq8及其论坛中找到了解决方案,但他们并没有为我工作.奇怪的是,只要退出代码是正确的,我在任何情况下都不会获得sdterr的输出.

我在Red Hat Linux 5上使用Perl版本5.8.8.

这是我正在尝试的一个例子:

my $cmd="less";
my $out=`$cmd 2>&1`;

要么

my $out=qx($cmd 2>&1);

要么

open(PIPE,"$cmd 2>&1|");

当命令成功运行时,我可以捕获stdout.

我不想使用其他捕获模块.如何捕获外部命令的完整结果?

解决方法

实际上,写这个的正确方法是:

#!/usr/bin/perl
$cmd = 'lsss';  
my $out=qx($cmd 2>&1);
my $r_c=$?;
print "output was $out\n";
print "return code = ",$r_c,"\n";

如果没有错误,你将得到’0′,如果错误,你将得到’-1′.

猜你在找的Perl相关文章