IPC::System::Simple能否捕获标准错误输出?

3
我想在我的Perl代码中调用一个脚本,并捕获它的STDERR和STDOUT合并在一起。
我通常使用IPC::System::Simple中的capture,但它似乎不允许捕获STDERR。

与仅使用Perl的固有功能相比,那个模块似乎会带来很多麻烦。 - tchrist
2个回答

3
您可以使用2>&1将标准错误(STDERR,文件描述符2)重定向到标准输出(STDOUT,文件描述符1)。
qx//操作符的perlop中得知:
由于反引号不影响标准错误,因此如果您关心这一点,请使用 shell 文件描述符语法(假设 shell 支持此功能)。要捕获命令的 STDERR 和 STDOUT 一起,请执行以下操作: $output = `cmd 2>&1`;

只是为了澄清,这告诉 shell 将文件句柄 2 重定向到文件句柄 1。由于文件句柄 2 是 STDERR 而文件句柄 1 是 STDOUT,它会按照你想要的方式执行。 - Chas. Owens

2

在POSIX系统上,您可以执行以下操作。在Windows上,这将在cygwin中起作用。

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

然而,如果你想要区分标准错误输出(STDERR)和标准输出(STDOUT),也许你需要使用IPC::Open3或名字有误的IPC::Open3::Util


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接