【问题标题】:How to pipe a string to process' STDIN?如何通过管道传输字符串以处理'STDIN?
【发布时间】:2017-11-13 18:28:05
【问题描述】:

我有一个需要管道输入的命令。例如,考虑著名的cat 命令:

$ echo Hello | cat
Hello

假设我在 Perl 6 程序中有一个字符串,我想通过管道传递给命令:

use v6;

my $input = 'Hello'; # This is the string I want to pipe to the command.
my $proc  = run 'cat', :in($input);

这不起作用(我没有输出)。我可以解决这个问题 调用bashecho:

my $proc  = run 'bash', '-c', "echo $input | cat";

但是有没有办法在不运行 bashecho 的情况下做到这一点?

在 Perl5 中,我可以简单地执行 my $pid = open my $fh, '|-', 'cat'; 然后 print $fh $str

【问题讨论】:

  • 您实际上是在询问如何直接写入进程的标准输入。 (管道是外壳的一个特征)

标签: pipe raku


【解决方案1】:

管道几个命令也很容易。实现相当于管道回显“Hello, world” |在 Perl 6 中使用 cat -n,并捕获第二个命令的输出,您可以这样做

my $p1 = run 'echo', 'Hello, world', :out;
my $p2 = run 'cat', '-n', :in($p1.out), :out;
say $p2.out.get;

您也可以直接从您的程序中输入 :in 管道,方法是将其设置为 True,这将通过 Proc 上的 .in 方法使管道可用:

my $p = run "cat", "-n", :in, :out;
$p.in.say: "Hello,\nworld!";
$p.in.close;
say $p.out.slurp: :close;
# OUTPUT: «1  Hello,␤ 
#          2  world!␤» 

直接来自docs,顺便说一句

【讨论】:

  • 谢谢!很高兴知道,但如果我不想运行 echo 怎么办?
  • 老兄,这在同一个文档中进行了描述,只是稍后一段。
  • @HåkonHægland these modulesthis onethis one 是否与您想要的相关,也许与此答案相结合?
猜你喜欢
  • 2019-09-05
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2012-09-06
相关资源
最近更新 更多