【发布时间】:2010-11-06 11:35:34
【问题描述】:
我想从我的 Perl 代码中调用一个脚本,并将它的 STDERR 和 STDOUT 组合在一起。
我通常使用IPC::System::Simple 中的capture,但似乎不允许捕获 STDERR。
【问题讨论】:
-
与仅使用 Perl 的先天设施相比,该模块确实看起来很麻烦。
标签: perl redirect stdout stderr
我想从我的 Perl 代码中调用一个脚本,并将它的 STDERR 和 STDOUT 组合在一起。
我通常使用IPC::System::Simple 中的capture,但似乎不允许捕获 STDERR。
【问题讨论】:
标签: perl redirect stdout stderr
您可以使用2>&1 将 STDERR(文件描述符 2)重定向到 STDOUT(文件描述符 1)。
来自perlop 上的qx// 运算符:
因为反引号不影响 标准错误,使用 shell 文件 描述符语法(假设 shell 支持这一点)如果你想解决 这个。捕获命令的 STDERR 和 STDOUT 一起:
$output = `cmd 2>&1`;
【讨论】:
在 POSIX 系统上,您可以执行以下操作。在 Windows 上,这适用于 cygwin。
my @lines = capture("some command 2>&1");
但是,如果您想区分 STDERR 行和 STDOUT 行,可能需要使用IPC::Open3 或错误命名的IPC::Open3::Util。
【讨论】: