内联 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 = '';
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 = '';