2017-07-28 20 views
2

該程序捕獲所有從另一個程序的標準錯誤的,但有時給了我一個局部行:如何從另一個程序的標準錯誤中逐行讀取?

#!/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的問題。

+0

將它推入另一個變量,並在該變量中有一個換行符時將其打印出來,這將是我首先嚐試的。 –

+0

您正在使用哪個版本的Rakudo Perl 6?我無法重現此問題。無論如何,'Supply.lines'應該*不*給你不完整的行。因此,如果在最新版本的Rakudo Perl 6上發生這種情況,應該將其報告爲一個錯誤。 –

回答

3

你在使用哪個版本的Rakudo Perl 6?我無法重現此問題。無論如何,Supply.lines不應該給你不完整的行,永遠。因此,如果在最新版本的Rakudo Perl 6上發生這種情況,應該將其報告爲一個錯誤。

+0

我無法在最新版本中重現它。感謝您指出我已經檢查過的顯而易見的事情。我的'.bashrc'仍在載入較舊的Rakudo Star環境模塊。 –