Чтение из связанного канала с использованием Proc :: Async - PullRequest
0 голосов
/ 13 мая 2018

Proc::Async - это один из классов, которые Perl 6 использует для асинхронного взаимодействия с системой. В документации указан способ для привязки к выходу внешней программы :

my $p = Proc::Async.new("ls", :out);
my $h = "ls.out".IO.open(:w);
$p.bind-stdout($h);
await $p.start;

say "Done";

(добавлены некоторые модификации, например, ожидание обещания). Тем не менее, я не знаю, как напечатать вывод этого $p. Добавление tap приводит к этой ошибке:

Cannot both bind stdout to a handle and also get the stdout Supply

в блоке в строке bind-stdout.p6 8

В документации есть print и методы записи , но я не знаю, как read из нее, кроме чтения файла. Есть идеи?

1 Ответ

0 голосов
/ 13 мая 2018

Я не уверен, что вы можете сделать это (ошибка очень явная).В качестве обходного пути вы можете получить обычное нажатие и распечатать на стандартный вывод и файл в одном блоке:

my $p = Proc::Async.new("ls", :out);
my $h = "ls.out".IO.open(:w);
$p.stdout.tap(-> $str { print $str; $h.print($str) });
await $p.start;

say "Done";
...