如何逐行读取另一个程序的标准错误?
How can I read from the standard error of another program, line by line?
这个程序捕获了另一个程序的所有标准错误,但它有时会给我一个部分行:
#!/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
重现,但这在 Rakudo Star 2017.07
中不是问题,正如下面 Elizabeth Mattijsen 所指出的。
您使用的是哪个版本的 Rakudo Perl 6?我无法重现这个问题。无论如何,Supply.lines
永远不会给你不完整的行。因此,如果最新版本的 Rakudo Perl 6 发生这种情况,则应将其报告为错误。
这个程序捕获了另一个程序的所有标准错误,但它有时会给我一个部分行:
#!/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
重现,但这在 Rakudo Star 2017.07
中不是问题,正如下面 Elizabeth Mattijsen 所指出的。
您使用的是哪个版本的 Rakudo Perl 6?我无法重现这个问题。无论如何,Supply.lines
永远不会给你不完整的行。因此,如果最新版本的 Rakudo Perl 6 发生这种情况,则应将其报告为错误。