内联 Python,无法将 stdout/sdterr 从 python 读取到 perl

Inline Python, not able to read stdout/sdterr from python to perl

use Test::Trap;
use Data::Dumper;

use Inline Python => <<END;
import logging
from os import sys
_logger = logging.getLogger()
_logger.setLevel(logging.INFO)
handler = logging.StreamHandler(sys.stderr)
_logger.addHandler(handler)

def fun():
    print("From print")
    logging.info("Inside fun")
END

trap { fun(); };
print Dumper($trap->stdout);
print Dumper($trap->stderr);


sub fun1 {
    print "From fun1";
}

trap {fun1();};
print "Trap stdout from perl subroutine call\n";
print Dumper($trap->stdout);
print Dumper($trap->stderr);

输出:

From print
Inside fun
$VAR1 = '';
$VAR1 = '';
Trap stdout from perl subroutine call
$VAR1 = 'From fun1'
$VAR1 = '';

此程序的输出是在屏幕上打印“From print”和“Inside fun”,但 $trap->stderr$trap->stdout 打印为空白 fun()(python API 从 perl 调用) 但是对于在 Perl 代码中定义的 fun1() 子例程,打印 trap->stdout

任何人都可以建议如何使用 perl-python 接口的陷阱获得 stdout/stderr 吗?

默认的“捕获策略”仅捕获发送到 STDOUT 和 STDERR Perl 文件句柄的内容,但Python对 Perl 文件句柄一无所知。

替换

use Test::Trap;

use Test::Trap ':stdout(systemsafe):stderr(systemsafe)';

输出

$VAR1 = 'From print
';
$VAR1 = 'Inside fun
';
Trap stdout from perl subroutine call
$VAR1 = 'From fun1';
$VAR1 = '';