該程序捕獲所有從另一個程序的標準錯誤的,但有時給了我一個局部行:如何從另一個程序的標準錯誤中逐行讀取?
#!/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
,被打破的標準誤差兩個不同間s。但我希望它等待並給我一整行。
更新:這是我的重複性使用Rakudo Star 2017.04
的,但這不是由下面伊麗莎白Mattijsen指出了Rakudo Star 2017.07
的問題。
將它推入另一個變量,並在該變量中有一個換行符時將其打印出來,這將是我首先嚐試的。 –
您正在使用哪個版本的Rakudo Perl 6?我無法重現此問題。無論如何,'Supply.lines'應該*不*給你不完整的行。因此,如果在最新版本的Rakudo Perl 6上發生這種情況,應該將其報告爲一個錯誤。 –