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

前端之家收集整理的这篇文章主要介绍了如何将perl代码输出到STDOUT / STDERR和一个文件,实时和跨平台?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要将正常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;
}

猜你在找的Perl相关文章