perl - Perl 脚本在不使用 Capture::Tiny 模块的情况下捕获标准错误消息
问题描述
我在使用 perl 中的 backticks 命令say 'make target' 捕获 stderr 消息时遇到问题。因此,我使用了 Capture::Tiny 模块来捕获标准错误消息。但是我在安装它时遇到了问题,并且想知道使用此模块以外的其他方法。
如果您知道,请告诉我。
问候, 普尔尼玛
解决方案
因为反引号不影响标准错误,所以如果您想解决这个问题,请使用 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");
推荐阅读
- tensorflow - 如何将张量 dtype float32_ref 转换为 dtype float32?
- azure-cosmosdb - CosmosDB C# sql 不返回结果
- django - 如何为我的所有模块使用相同的 base.html 模板文件?
- python-3.x - 异国情调的 CSV 方言解析
- javascript - 通过命令行传递 JSON 有效负载
- keras - 嵌入 N 维序列后的 LSTM
- php - MySQL返回'未知列'测试'在字段列表中'
- apache-spark - 如何在pyspark中计算两个矩阵的外积
- java - 如何将一个节点插入到树路径中的另一个节点?
- hp-uft - 即使启用扩展程序后,UFT 也无法识别 Chrome 中的对象