【问题标题】:Can IPC::System::Simple capture STDERR?IPC::System::Simple 可以捕获 STDERR 吗?
【发布时间】:2010-11-06 11:35:34
【问题描述】:

我想从我的 Perl 代码中调用一个脚本,并将它的 STDERR 和 STDOUT 组合在一起。

我通常使用IPC::System::Simple 中的capture,但似乎不允许捕获 STDERR。

【问题讨论】:

标签: perl redirect stdout stderr


【解决方案1】:

您可以使用2>&1 将 STDERR(文件描述符 2)重定向到 STDOUT(文件描述符 1)。

来自perlop 上的qx// 运算符:

因为反引号不影响 标准错误,使用 shell 文件 描述符语法(假设 shell 支持这一点)如果你想解决 这个。捕获命令的 STDERR 和 STDOUT 一起:

$output = `cmd 2>&1`;

【讨论】:

  • 澄清一下,这告诉 shell 将文件句柄 2 重定向到文件句柄 1。由于文件句柄 2 是 STDERR 而文件句柄 1 是 STDOUT,所以它可以满足您的要求。
【解决方案2】:

在 POSIX 系统上,您可以执行以下操作。在 Windows 上,这适用于 cygwin

my @lines = capture("some command 2>&1");

但是,如果您想区分 STDERR 行和 STDOUT 行,可能需要使用IPC::Open3 或错误命名的IPC::Open3::Util

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2010-12-05
    • 2013-12-12
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多