如何逐行读取另一个程序的标准错误?

时间:2017-07-28 17:25:35

标签: asynchronous perl6

该程序从另一个程序中捕获所有标准错误,但它有时会给我一个部分界限:

#!/bin/env perl6

my $proc = Proc::Async.new('./print_to_stderr');

$proc.stderr.tap( -> $str {
    for $str.lines() {
        put "Captured ERR: $_";
    }
});

my $promise = $proc.start;

await $promise;

使用./print_to_stderr

#!/bin/env perl6

for ^10 {
    $*ERR.put: "($_): Howdee";
}

刚才,我得到了以下输出:

Captured ERR: (0): Howdee
Captured ERR: (1): Howdee
...
Captured ERR: (6): Howdee
Captured ERR: (7): Howde
Captured ERR: e
Captured ERR: (8): Howdee

如您所见,对于项目7,标准错误在两个不同的tap之间被分解。但是我希望它等一下,给我一条整线。

更新:使用Rakudo Star 2017.04对我来说这是可重现的,但正如下面的Elizabeth Mattijsen所指出的那样,这不是Rakudo Star 2017.07中的问题。

1 个答案:

答案 0 :(得分:3)

您使用的是哪个版本的Rakudo Perl 6?我无法重现这个问题。无论如何,Supply.lines不应该给你不完整的行。因此,如果在最新版本的Rakudo Perl 6上发生这种情况,则应将此报告为错误。