加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将perl代码输出到STDOUT / STDERR和一个文件,实时和跨平台?

发布时间:2020-12-15 21:16:24 所属栏目:大数据 来源:网络整理
导读:我需要将正常Perl代码的输出同时输出到屏幕和日志文件中.但问题是工具的运行时间可能是几小时.使用Capture :: Tiny的tee意味着只有在脚本终止后才会写入日志文件,这不是很有用. 为了进一步复杂化,我需要从同一进程以及使用system()调用的进程捕获直接perl的
我需要将正常Perl代码的输出同时输出到屏幕和日志文件中.但问题是工具的运行时间可能是几小时.使用Capture :: Tiny的tee意味着只有在脚本终止后才会写入日志文件,这不是很有用.

为了进一步复杂化,我需要从同一进程以及使用system()调用的进程捕获直接perl的输出.

最后,由于雇主的限制,它也需要在Win32上运行.

我还有其他选择吗?

解决方法

使用 PerlIO::Util.

刚刚在Strawberry Perl 5.12.1 32 bit下进行了测试,它运行得很好,所以它将是跨平台的.以下代码完全按照您的预期执行.并且由于它修改了实际的STDOUT和STDERR文件句柄,因此对它们的任何写入都将自动进行.

use strict;
use warnings;

use IO::Handle;
use PerlIO::Util;
use 5.012;

for (*STDOUT,*STDERR) {
  $_->autoflush; $_->push_layer(tee => ">>stdout.txt");
}

for (1..10) {
  say $_;
  warn $_ unless $_ % 2;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读