繁体   English   中英

无需使用 Capture::Tiny 模块即可捕获标准错误消息的 Perl 脚本

[英]Perl script to capture the stderr messages without using use Capture::Tiny module

我在使用反引号命令捕获 stderr 消息时遇到问题,在 perl 中说“make target”。 因此我使用了 Capture::Tiny 模块来捕获 stderr 消息。 但是我在安装它时遇到问题,并且想知道除使用此模块之外的其他方法。

如果你知道,请告诉我。

问候, 普尔尼玛

perldoc perlop

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

 $output = `cmd 2>&1`;

要捕获命令的 STDOUT 但丢弃其 STDERR:

 $output = `cmd 2>/dev/null`;

要捕获命令的 STDERR 但丢弃其 STDOUT(这里的排序很重要):

 $output = `cmd 2>&1 1>/dev/null`;

交换命令的 STDOUT 和 STDERR 以捕获 STDERR 但让其 STDOUT 出现旧的 STDERR:

 $output = `cmd 3>&1 1>&2 2>&3 3>&-`;

要分别读取命令的 STDOUT 和 STDERR,最简单的方法是将它们分别重定向到文件,然后在程序完成后从这些文件中读取:

 system("program args 1>program.stdout 2>program.stderr");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM