gpt4 book ai didi

Perl:将 STDERR 重定向到文件而不创建空文件?

转载 作者:行者123 更新时间:2023-12-01 08:39:28 25 4
gpt4 key购买 nike

我在 perl 脚本中重定向 STDOUT 和 STDERR:

open STDOUT, '>', $logfile or die "Can't redirect STDOUT: $!";
open STDERR, ">&STDOUT" or die "Can't dup for STDERR: $!";

在...之前和之后保存和恢复文件句柄

问题是,如果程序没有输出,我最终会得到一个大小为 0 的文件,但我想根本没有文件。如果不求助于手动检查和删除文件,我该如何做到这一点?

谢谢!

最佳答案

您可以将 STDOUT 绑定(bind)到一个延迟打开目标文件直到第一次写入句柄的类:

package FastidiousHandle;

use Tie::StdHandle;
use strict;

our @ISA = 'Tie::StdHandle';

sub TIEHANDLE {
my ($class, @args) = @_;
my $self = $class->SUPER::TIEHANDLE;
${*$self}{openargs} = \@args;
return $self;
}

sub WRITE {
my $self = shift;
my $openargs = delete ${*$self}{openargs};
$self->OPEN(@$openargs) if $openargs;
$self->SUPER::WRITE(@_);
}

1;

然后在你的主程序中,你会说:

tie *STDOUT, 'FastidiousHandle', '>', $path;
my $saved_stderr = *STDERR;
*STDERR = *STDOUT;

要恢复以前的句柄,你会说:

*STDERR = $saved_stderr;
untie *STDOUT;

关于Perl:将 STDERR 重定向到文件而不创建空文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709870/

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