[英]How can I read stderr when a command execution fails in Perl?
我在perl
执行diff
命令。
my @lines = `/usr/local/bin/diff -udr \"$expected_file\" \"$gen_file\"`;
if ($? != 0)
{
print ERRFILE "Diff between $expected_file and $gen_file failed\n";
return $diff_err;
}
由于某种原因, diff
可能在这里失败了。 例如:stderr显示/ usr / local / bin / diff:test.txt:没有这样的文件或目录 。 我想在程序中阅读此消息。 我如何找到diff
命令(或grep
或我执行的任何命令)的stderr消息?
提前感谢您的帮助。
谢谢,Mathew Liju
这在perlfaq8中得到了解答:如何从外部命令捕获STDERR?
如果我想读取进程的STDOUT和STDERR,我使用Perl附带的IPC :: Open3。 这样,我不必合并这些流,然后找出输出的哪一部分来自什么。
我会尽可能避免临时文件(所以没有2>file.txt
)。 当我可以直接读取STDERR时,这只是太多的工作和代码。
有几个CPAN模块可以简化这一过程,让您将STDOUT和STDERR分开。 例如, IO :: CaptureOutput可以让你这样做(虽然你需要自己拆分行):
use IO::CaptureOutput 'qxx';
my ($stdout, $stderr, $ok) =
qxx( qq(/usr/local/bin/diff -udr "$expected_file" "$gen_file") );
if (! $ok)
{
print ERRFILE "Diff between $expected_file and $gen_file failed\n";
return $stderr;
}
my @lines = split /\n/, $stdout;
- 大卫
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.