perl的logwrapper使用实例代码_perl教程-查字典教程网
perl的logwrapper使用实例代码
perl的logwrapper使用实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:这里为大家举二个小例子,供朋友们学习参考。对任何的函数记录函数运行的时间。复制代码代码如下:#!/usr/bin/perlusewarnin...

这里为大家举二个小例子,供朋友们学习参考。

对任何的函数记录函数运行的时间。

复制代码 代码如下:

#!/usr/bin/perl

use warnings;

use strict;

no strict "refs";

sub testLogToStd{

print "Test stdout : n";

open LOG,"> 2.txt";

select LOG;

print "just a testn";

#recover STDOUT

select STDOUT;

print "just a test2n";

close LOG;

}

sub testFun{

print "From testFunn";

print STDERR "From TestFun Errorn";

}

sub testFun2{

my $arg1 = shift;

my $arg2 = shift;

print "From testFun2n";

print $arg1."n";

print $arg2."n";

}

my $log_root = "log" if(! $3 ||$3 == "");

my $ret = system("mkdir $log_root") if(! -e $log_root);

my $report_log = "$log_root/report.log";

open my $REPORTLOG,">",$report_log or die "cannot not open log file report.logn";

sub logWrapper{

my $log_root = shift;

my $REPORTLOG = shift;

my $fun = shift;

my @parameters = @_;

*old_stdout = *STDOUT;

*old_stderr = *STDERR;

open LOG, ">","$log_root/$fun.log" or die "annot open log file $fun.n";

*STDOUT = *LOG;

*STDERR = *LOG;

my $start = time;

my $ret = &$fun(@parameters);

my $end = time;

*STDOUT = *old_stdout;

*STDERR = *old_stderr;

close LOG;

my $duration = $end - $start;

print $REPORTLOG "$funn";

print $REPORTLOG "start:".localtime($start)."n";

print $REPORTLOG "end:".localtime($end)."n";

print $REPORTLOG "duration:".formatTimeDuration($duration)."n";

print $REPORTLOG "result:$retn";

print $REPORTLOG "n";

print $REPORTLOG "n";

}

sub formatTimeDuration($){

my $t = shift;

my $hrs = int($t/3600);

my $mins = int($t%3600/60);

my $secs = int($t%3600%60);

return "$hrs:$mins:$secs";

}

&logWrapper($log_root,$REPORTLOG,"testFun");

&logWrapper($log_root,$REPORTLOG,"testFun2","arg1","arg2");

print "thanksn";

若需要调用外部命令,则需要如下:

复制代码 代码如下:

#!/usr/bin/perl

use strict;

use warnings;

# run external commands

# redirect stdout and stderr

sub run_cmd{

my $cmd = shift;

my $pid = open(PH, "$cmd 2>&1 |");

while (<PH>) {print $_; }

}

open(FH, ">", "perl-test.log");

*old_stdout = *STDOUT;

*old_stderr = *STDERR;

*STDOUT = *FH;

*STDERR = *FH;

my $ret = undef;

$ret = readpipe("cp a b ");

$ret = system("cp a b");

$ret = `cp a b`;

run_cmd("cp a b");

print "AA";

print STDERR "BB";

*STDOUT = *old_stdout;

*STDERR = *old_stderr;

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新perl学习
    热门perl学习
    脚本专栏子分类