如何将某些命令的输出重定向到文件,但将某些命令保留在控制台中?

我使用下面的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重定向之前,并恢复它在需要时以后。再次,看open

    open 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到达控制台中的默认,否则你会拿出所有标准输出,打算打印一旦你selectSTDOUT

  • 打印日志直接文件,如在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

回到顶部