我在perl中运行unix命令
$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;
但执行的输出也会打印在屏幕上。 如何执行命令而不在屏幕上打印结果?
答案 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")