【问题标题】:Inline Python, not able to read stdout/sdterr from python to perl内联 Python,无法从 python 读取 stdout/sdterr 到 perl
【发布时间】:2021-04-21 09:51:50
【问题描述】:
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-&gt;stderr$trap-&gt;stdout对于fun()打印为空白(从perl调用的python API) 但是对于在 Perl 代码中定义的fun1() 子例程,会打印出trap-&gt;stdout

谁能建议如何使用 perl-python 接口的陷阱获取 stdout/stderr?

【问题讨论】:

  • 你有没有试过看看内联python的输出是否真的进入了主程序的输出通道?它可以做各种各样的事情,比如创建一个子shell,使用不同的二进制文件来执行python代码。例如,仅仅因为您在屏幕上看到它并不意味着它会进入标准输出。

标签: python perl


【解决方案1】:

默认的“捕获策略”只捕获发送到 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 = '';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2021-04-23
    • 2022-06-11
    • 2021-09-24
    • 2013-01-15
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多