raku - How do I store the value returned by either run or shell?
问题描述
Let's say I have this script:
# prog.p6
my $info = run "uname";
When I run prog.p6
, I get:
$ perl6 prog.p6
Linux
Is there a way to store a stringified version of the returned value and prevent it from being output to the terminal?
There's already a similar question but it doesn't provide a specific answer.
解决方案
您需要$*OUT
通过设置启用标准输出管道,否则默认为:out
。所以:
my $proc = run("uname", :out);
my $stdout = $proc.out;
say $stdout.slurp;
$stdout.close;
可以缩短为:
my $proc = run("uname", :out);
say $proc.out.slurp(:close);
如果您想在 stderr 上单独捕获输出而不是在 stdout 上,您可以执行以下操作:
my $proc = run("uname", :out, :err);
say "[stdout] " ~ $proc.out.slurp(:close);
say "[stderr] " ~ $proc.err.slurp(:close);
或者,如果您想将 stdout 和 stderr 捕获到一个管道,则:
my $proc = run("uname", :merge);
say "[stdout and stderr] " ~ $proc.out.slurp(:close);
最后,如果您不想捕获输出并且不想将其输出到终端:
my $proc = run("uname", :!out, :!err);
exit( $proc.exitcode );
推荐阅读
- vue.js - 如何在挂载或创建的钩子中使用另一个计算属性?
- google-apps-script - gmail插件本地化的选项?
- sql-server - 如何在 SELECT 上出现死锁
- linux - 使用 bash 脚本从远程托管的文件中加载环境变量
- activemq - activemq 内存限制配置 Vs maxPageSize
- python - Pygame - 将文本添加到矩形的类实例
- html - 为什么我的字体在表单文本字段中不起作用?
- jsf - 如何在 JSF 中显示 JavaScript JSON 数组?
- javascript - 这是打字稿中的单身人士吗?
- git - 是否可以为不同的站点设置全局 git 配置?