我想从 Perl 脚本中执行外部命令,将 stdout 和 stderr 的输出放入$variable
我的选择,并将命令的退出代码放入$?
多变的。
我经历过解决方案perlfaq8 http://perldoc.perl.org/perlfaq8.html#Why-can%27t-I-get-the-output-of-a-command-with-system%28%29?和他们的论坛,但他们不为我工作。奇怪的是我don't只要退出代码正确,在任何情况下都可以获得 sdterr 的输出。
我在 Red Hat Linux 5 上使用 Perl 版本 5.8.8。
这是我正在尝试的示例:
my $cmd="less";
my $out=`$cmd 2>&1`;
or
my $out=qx($cmd 2>&1);
or
open(PIPE, "$cmd 2>&1|");
当命令成功运行时,我可以捕获标准输出。
我不想使用额外的捕获模块。如何捕获外部命令的完整结果?
这正是大卫·戈尔登在写作时所面临的挑战Capture::Tiny https://metacpan.org/module/Capture::Tiny。我认为它将帮助您准确地完成您需要的事情。
基本示例:
#!/usr/bin/env perl
use strict;
use warnings;
use Capture::Tiny 'capture';
my ($stdout, $stderr, $return) = capture {
system( 'echo Hello' );
};
print "STDOUT: $stdout\n";
print "STDERR: $stderr\n";
print "Return: $return\n";
重读后你可能真的想要capture_merged
将 STDOUT 和 STDERR 连接到一个变量中,但我给出的示例很好且通用,所以我将保留它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)