【问题标题】:Perl execute sql, print output to a file AND write to screenPerl执行sql,将输出打印到文件并写入屏幕
【发布时间】:2015-02-10 04:48:02
【问题描述】:

我通过我的 perl 脚本调用一个 SQL 文件,它将输出写入日志文件,如下所示:

system("sqlplus -s schema/pwd\@dbname \@$sql_file > $log_file");

但是,我也希望将输出写入屏幕。有没有办法做到这一点(除了重新执行没有写入日志文件的命令)?

【问题讨论】:

标签: perl sqlplus


【解决方案1】:

您可以自己捕获结果并将它们发送到两个目标。

my $output = `sqlplus -s schema/pwd\@dbname \@$sql_file`;
print $output;
open( my $file, '>', $log_file ) or die $!;
print {$file} $output;
close $file;

【讨论】:

    【解决方案2】:

    通过使用管道读取其STDOUT,您可以有效地tee 命令的输出,并节省一些内存:

    open(my $cmdfh, "sqlplus -s schema/pwd\@dbname \@$sql_file |") or die $!;
    open(my $logfh, '>', $log_file ) or die $!;
    
    while (<$cmdfh>) { 
        print; 
        print {$logfh} $_;
    }
    
    close $logfh;
    close $cmdfh;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      相关资源
      最近更新 更多