【问题标题】:How to execute an external command and capture its output in perl6?如何在 perl6 中执行外部命令并捕获其输出?
【发布时间】:2011-01-10 04:48:12
【问题描述】:

如何在 Perl6 中执行外部命令并捕获其输出?

Perl5 样式的反引号似乎不起作用:

> my $results = `ls`;
Confused at line 1, near "my $results"

Synopsis 16 记录了 run 方法,但这会返回退出状态而不是 stdout 的输出。

我正在使用 Rakudo 实现 (rakudo-star-2010.12)。

【问题讨论】:

    标签: process raku rakudo


    【解决方案1】:

    使用 qqx 或 qx 代替,例如:

    > my $results = qqx{ls};
    

    Larry Wall answered 邮件列表上的一个等效问题:

    [...]

    :用什么代替反引号或 qx{}?

    qqx[] 或 qq:x[] 将是确切的 相等的。 qx[] 或 q:x[] 将是 与单引号语义相同。 (可能没有反引号 这个目的,因为我们保留了` 对于用户定义的东西,因为 反引号在视觉上很难 从许多单引号中分辨出来 字体。)

    【讨论】:

    • 我在发布问题之前找到了答案,但还是发布了它以防对其他人有用。
    【解决方案2】:
    【解决方案3】:

    这也可以使用run()out 参数安全地完成(无需接触外壳):

    my $proc = run 'ls', q!/tmp/"This" is an ugly name, isn't it?/!, :out;
    my $output = $proc.out.slurp-rest;
    

    更多详情请见Proc class

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 2017-07-05
      • 1970-01-01
      • 2016-12-30
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多