我需要将普通 Perl 代码的输出同时输出到屏幕和日志文件中。然而,问题是该工具的运行时间可能长达数小时。使用 Capture::Tiny 的 tee 意味着日志文件只会在脚本终止后写入,这不是很有用。
为了使事情更加复杂,我需要从同一进程捕获直接 perl 的输出,以及使用 system() 调用的进程的输出。
最后,由于雇主的限制,它也需要在 Win32 上工作。
我还有哪些其他选择?
最佳答案
使用PerlIO::Util .
刚刚在 Strawberry Perl 5.12.1 32 位下对其进行了测试,它运行良好,因此它将是跨平台的。下面的代码完全符合您的预期。由于它修改了实际的 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 - 如何实时跨平台将 perl 代码输出到 STDOUT/STDERR 和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323268/