使用Proc :: Async

时间:2018-05-13 07:31:30

标签: asynchronous process pipe stdout perl6

Proc::Async是Perl 6用于与系统异步交互的类之一。文档以这种方式指定to bind to the output of an external program

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 and write methods,但除了阅读文件外,我不知道如何read。有什么想法吗?

1 个答案:

答案 0 :(得分:8)

我不确定你能做到这一点(错误很明确)。作为一种解决方法,您可以定期点击并打印到stdout和同一块中的文件:

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";