Raku:将字符串发送到子进程的标准输入

标签 raku

我想向子进程的标准输入流发送一个字符串,就像我在 Perl 5 中可能做的那样:

pipe *READ, *WRITE;

if (my $pid = fork()) {
    close READ;
    print WRITE "Hello world!\n";
    close WRITE;
} else {
    close WRITE;
    open STDIN, '<&=' . fileno READ;
    close READ;
    exec 'cat';
}
Raku 中的等效结构是什么?
我可以将任何输入发送到外部 cat将其返回到流中的过程我可以传递给另一个过程,但这太可怕了。
我找到了 this Raku 模块似乎相关,但它具有“输入和输出”作为 TODO,所以它现在对我没有帮助。
还有this question在这个与这个非常匹配的网站上。该作者要求提供一种不依赖外部流程的解决方案,就像我一样,但公认的解决方案仍然使用外部流程。
最后,我注意到 docs Raku的IO::Pipe类,这似乎应该符合要求。但是,该页面说:
Pipes can be easily constructed with sub run and Proc::Async.new.
...我明确地想避免。我尝试创建一个新的 IO::Pipe对象,希望我可以使用它的inout以自然的方式流式传输,但我得到:
> my $pipe = IO::Pipe.new
Required named parameter 'on-close' not passed
  in block <unit> at <unknown file> line 1
文档页面上没有提到该参数,所以我想我在这里冒险进入了未定义的领域。

最佳答案

因此,这变得令人尴尬地容易。只需提供一个 bool 值 True run 的值的in参数,然后访问结果进程的 in字段并写入。

my $proc = run 'my-command', 'and', 'args', :in;
$proc.in.say('Hello world!');
$proc.in.close;

关于Raku:将字符串发送到子进程的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64757138/

相关文章:

raku - perl6 冲刺 vs 文件句柄

parsing - 为不同数量的规则指定通用语法 Action

read-eval-print-loop - 如何创建 Perl 6 REPL 插件?

raku - 如何在 Windows 中为 Perl6 创建弹出窗口?

testing - "Can' t 打开 perl 脚本 "t/spec/fudgeall": File or directory not found"

raku - 将字符串转换为每个字节的十六进制列表 (Raku)

warnings - 理解 pragma

raku - 使用模块加载一组相关函数

utf-8 - 我可以问 Perl 6 的 LWP::Simple 来处理格式错误的 UTF-8 吗?

syntax - 有没有办法以编程方式测试编译 Raku 代码?