如何将某些命令的输出重定向到文件,但将某些命令保留在控制台中?
我使用下面的perl脚本,如何将某些命令的输出重定向到文件,但将某些命令保留在控制台中?
open (STDOUT, '>',"log.txt")|| die "ERROR: opening log.txt\n"; print "\n inside";
close (STDOUT);
print "\noutside";
我需要字符串“内部”需要内部log.txt中进行打印。需要在控制台中打印“外部”字符串。
但是用我的脚本字符串“inside”打印在log.txt中,但字符串“outside”不打印在控制台上。
任何人都可以帮助我在此
回答:
您redirect the standard output stream到一个文件open STDOUT, '>', $file
。之后,没有简单的方法可以打印到控制台。
一些方法来打印到既文件和控制台
保存
STDOUT
重定向之前,并恢复它在需要时以后。再次,看openopen SAVEOUT, ">&STDOUT" or warn "Can't dup STDOUT: $!";
open *STDOUT, ">", $logfile or warn "Can't redirect STDOUT to $logfile: $!";
say "goes to file";
...
open STDOUT, ">&SAVEOUT" or warn "Can't reopen STDOUT: $!"; # restore
say "goes to console";
打印到一个变量,你打算控制台什么;使用select切换的地方印刷品去
open my $fh_so, '>', \my $for_stdout;
select $fh_so;
say "goes to variable \$for_stdout";
say STDOUT "goes to console";
...
select STDOUT; # make STDOUT default again
say $for_stdout; # goes to console (all accumulated $fh_so prints)
有了这个,你可以通过指定
STDOUT
到达控制台中的默认,否则你会拿出所有标准输出,打算打印一旦你select
回STDOUT
打印日志直接文件,如在Jens's answer
open my $fh_log, '>', $logfile or die "Can't open $logfile: $!";
say $fh_log "goes to $logfile";
say "goes to console";
...
close $fh_log;
其中默认
print
(或更确切地说say
)继续去控制台
前两个看起来有点麻烦,不是他们。我建议直接将日志打印到日志文件中,除非需要为大部分程序重定向STDOUT
,或者您有一个令人信服的理由来处理文件句柄。
对于say
,它为打印的内容添加换行符,您需要在开始处使用use feature 'say';
。请致电use warnings;
和use strict;
。
以上是 如何将某些命令的输出重定向到文件,但将某些命令保留在控制台中? 的全部内容, 来源链接: utcz.com/qa/262923.html