我需要将正常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; }