从perl中的unix命令执行停止控制台输出

时间:2012-10-18 17:14:01

标签: perl unix

我在perl中运行unix命令

$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;

但执行的输出也会打印在屏幕上。 如何执行命令而不在屏幕上打印结果?

3 个答案:

答案 0 :(得分:4)

标准输出流未打印到屏幕 - 它被捕获到$result。但是有一个称为标准错误流的第二个输出流,程序可以写入,并且默认情况下也会进入屏幕。许多程序使用此流进行日志记录,或者(在ls的情况下)用于编写错误消息。要另外捕获此信息,请使用

$cmd = "ls -l 2>&1";

要丢弃它,请使用

$cmd = "ls -l 2>/dev/null";

答案 1 :(得分:0)

我认为这是一个错误。在shell中尝试:

perl -e 'my $x = `ls -l`;'

这不会产生任何输出。

答案 2 :(得分:0)

发生这种情况可能是因为$log_file以某种方式附加到STDOUT,复制到它,类似于:

open(my $log_file, ">&STDOUT")