gpt4 book ai didi

perl - File::Tee 和打开一个管道到 "tee"之间有什么区别吗?

转载 作者:行者123 更新时间:2023-12-02 04:56:52 26 4
gpt4 key购买 nike

我有一个关于 this answer 的问题,在下面引用,由 friedo 在这里回答另一个问题。 (我无权对此发表评论,所以我将此作为问题提出。)

"You can use File::Tee.

use File::Tee qw(tee);
tee STDOUT, '>>', 'some_file.out';
print "w00p w00p";

If File::Tee is unavailable, it is easily simulated with a pipeline:

open my $tee, "|-", "tee some_file.out";
print $tee "w00p w00p";
close $tee;

这两个T恤是一样的吗?还是一个来自 Perl 而另一个来自 Linux/Unix?

最佳答案

它们大部分相同,但实现细节不同。

打开一个管道到 tee some_file.out 派生一个新进程并运行 Unix/Linux 实用程序 tee(1)在里面。该程序读取其标准输入(即您写入管道的任何内容)并将其写入 some_file.out 以及标准输出(它从您的程序继承)。

显然,这在 Windows 或任何其他不提供 Unix 风格的 tee 命令的系统上不起作用。


File::Tee另一方面,模块是用纯 Perl 实现的,不依赖于任何外部程序。然而,根据其文档,它通过派生一个新进程并在其下运行本质上是 Unix tee 命令的 Perl 重新实现来工作。正如文档所述,这确实有一些优势:

"It is implemeted around fork, creating a new process for every tee'ed stream. That way, there are no problems handling the output generated by external programs run with system or by XS modules that don't go through perlio."

另一方面,fork 的使用也有其缺点:

"BUGS

Does not work on Windows (patches welcome)."


如果您确实想要一个适用于所有平台的 tee 功能的纯 Perl 实现,请考虑使用 IO::Tee反而。与 File::Tee 不同,此模块使用 PerlIO 实现,不使用 fork。唉,这也意味着它可能无法正确捕获使用 system 或绕过 PerlIO 的 XS 模块执行的外部程序的输出。

关于perl - File::Tee 和打开一个管道到 "tee"之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17832329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com