gpt4 book ai didi

java - 在 perl 中捕获内联 java 错误

转载 作者:行者123 更新时间:2023-11-30 08:09:56 28 4
gpt4 key购买 nike

在这个使用内联 saxon XSLT 解析器的小 perl 脚本中:

use Inline::Java;
use warnings;
use XML::Saxon::XSLT2;
open(my $xslt, '<:encoding(UTF-8)', $xslfile) or die $!;
open(my $xml, '<:encoding(UTF-8)', $xmlfile) or die $!;
my $trans = XML::Saxon::XSLT2->new($xslt);
my $output = $trans->transform($xml);
print $output;

我想捕捉撒克逊人的转换错误。从命令行启动脚本,错误被写入 STDERR。但是我怎样才能将错误消息重定向到 perl 脚本中的文件呢?我尝试了 Tie::STDERR,但它不起作用。

我尝试使用重定向 STDERR

 open my $log_fh, '>>', '/tmp/the-log-file';
*STDERR = $log_fh;

然后 perl 错误会记录在/tmp/the-log-file 中,但不会记录 saxon 错误。

最佳答案

你应该可以用 Capture::Tiny 做到这一点, 它可以从外部程序和 XS 中获取 STDOUT 和 STDERR。

use strict;
use warnings;
use XML::Saxon::XSLT2;
use Capture::Tiny 'capture';

my ($xslfile, $xmlfile) = ( ... );

open(my $xslt, '<:encoding(UTF-8)', $xslfile) or die $!;
open(my $xml, '<:encoding(UTF-8)', $xmlfile) or die $!;

my $trans = XML::Saxon::XSLT2->new($xslt);
my $output;
my ( $stdout, $stderr ) = capture {
$output = $trans->transform($xml);
};

print $output;

请注意我没有对此进行测试。我也看不到您需要 Inline::Java 的地方。

关于java - 在 perl 中捕获内联 java 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989156/

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