我有一个在 linux 机器上运行的 perl 脚本 example.pl。我需要捕获执行 perl 脚本的输出并为其名称加上时间戳。我知道输出重定向方法,但我正在从脚本 example.pl 本身寻找一种方法(如果可能)
问问题
5732 次
3 回答
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";
}
于 2013-05-01T15:43:49.423 回答
1
您可以使用重定向输出和错误流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
于 2013-05-01T15:50:29.157 回答
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;
于 2013-05-01T15:45:33.623 回答