如何将linux上perl脚本的输出转储到文件名为timestamp的日志文件中

时间:2013-05-01 15:35:11

标签: linux perl logging

我有一个perl脚本example.pl,我在linux上运行。我需要捕获执行perl脚本的输出并为其名称添加时间戳。我知道输出重定向方法,但我正在寻找一种方法,从脚本example.pl本身(如果可能)这样做

3 个答案:

答案 0 :(得分:2)

将STDOUT重定向到文件很容易。只需在脚本开头执行此操作:

open STDOUT, '>', "my_stdout_file.txt";

这是一个返回带有时间戳的文件名的函数:

sub generate_timestamp_filename {
    my $tstamp = sprintf( "%04d%02d%02d%02d%02d%02d", 
                                $now[5]+1900, 
                                $now[4]+1, 
                                $now[3],
                                $now[2],      
                                $now[1],   
                                $now[0] );

    return "my_prefix_$tstamp.txt";
}

答案 1 :(得分:0)

这是最快的方法:

 open(STDOUT, ">myfile") or die $!;
 print "Hello world"; #now goes to myfile

 open(STDERR, ">hisfile") or die $!;
 warn "Error here"; #and that's in hisfile

另一种选择是使用select

open(my $FILE, ">stdout") or die $!;
my $old = select($FILE);

# Done capturing output
select $old;

答案 2 :(得分:0)

您可以使用Typeglobs 重定向输出和错误流,或者您可以执行以下操作。

#!/bin/perl 

open(STDOUT, '>',time.".out") or die $!; #the time function gives you the timestamp
open(STDERR, '>',time.".err") or die $!;
print "output"; #goes to <timestamp>.out
warn "error";   #goes to <timestamp>.err