如何将STDOUT
流重定向到我的 Perl 脚本中的两个文件(重复)?目前我只是流式传输到一个日志文件中:
open(STDOUT, ">$out_file") or die "Can't open $out_file: $!\n";
我必须改变什么?谢谢。
您也可以使用IO::Tee
.
use strict;
use warnings;
use IO::Tee;
open(my $fh1,">","tee1") or die $!;
open(my $fh2,">","tee2") or die $!;
my $tee=IO::Tee->new($fh1,$fh2);
select $tee; #This makes $tee the default handle.
print "Hey!\n"; #Because of the select, you don't have to do print $tee "Hey!\n"
是的,输出有效:
> cat tee1
Hey!
> cat tee2
Hey!
File::Tee提供了您需要的功能。
use File::Tee qw( tee );
tee(STDOUT, '>', 'stdout.txt');
使用tee
PerlIO 层。
use PerlIO::Util;
*STDOUT->push_layer(tee => "/tmp/bar");
print "data\n";
$ perl tee_script.pl > /tmp/foo
$ cat /tmp/foo
data
$ cat /tmp/bar
data
如果您使用的是类 Unix 系统,请使用tee实用程序。
$ perl -le '打印“你好,世界”' | 三通 /tmp/foo /tmp/bar 你好世界 $猫/tmp/foo /tmp/bar 你好世界 你好世界
要从您的程序中设置此复制,请设置从您STDOUT
到外部tee进程的管道。传递"|-"
给open
使这很容易做到。
#! /usr/bin/env perl
use strict;
use warnings;
my @copies = qw( /tmp/foo /tmp/bar );
open STDOUT, "|-", "tee", @copies or die "$0: tee failed: $!";
print "Hello, world!\n";
close STDOUT or warn "$0: close: $!";
演示:
$ ./stdout-副本-演示 你好世界! $猫/tmp/foo /tmp/bar 你好世界! 你好世界!