首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STDERR.puts与Ruby中的puts有什么不同?

STDERR.puts与Ruby中的puts有什么不同?
EN

Stack Overflow用户
提问于 2014-03-11 03:56:53
回答 2查看 40.4K关注 0票数 50

我正在从Ruby1.9编程中学习这门语言,他们在本书的一开始就把STDERR.puts扔进了一段代码中,但没有解释为什么要使用它,也没有解释它与puts有何不同。

我已经在谷歌上搜索并维基了这个术语,但我能从我的研究中收集到的所有信息是,它涉及到诊断。在Ruby编程提供的代码中,似乎没有链接到错误异常处理。

这是代码。

代码语言:javascript
复制
require_relative 'csv_reader'
reader = CsvReader.new
ARGV.each do |csv_file_name|
  STDERR.puts "Processing #{csv_file_name}"
  reader.read_in_csv_data(csv_file_name)
end

我确实在某个地方读到过STDERR.puts用于异常错误处理的文章,但我猜我想问的是它的行为是否与but有什么不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-11 03:59:21

默认情况下,puts写入STDOUT。通过指定STDERR.puts,您可以将输出发送到STDERR句柄。尽管实现行为是相同的,但使用STDERR而不是STDOUT肯定会影响程序的使用者,因为按照惯例,他们将尝试从STDOUT捕获程序的输出。最佳实践是将调试信息、错误、警告、状态等记录到STDERR,并将实际程序输出记录到STDOUT。

票数 80
EN

Stack Overflow用户

发布于 2014-03-11 04:20:19

每个程序在产生时都有三个标准文件描述符:标准输入、输出和错误流。

标准输入流是应当从中读取程序输入的通用流。同样,标准输出流是可以写入程序输出的通用流。那么,什么是标准误差呢?

在UNIX系统中,标准输出和标准错误之间的区别很细微,但却非常重要,这是因为程序是通过管道一起使用的。程序通常被设计为使用其他程序的输出作为它们的输入;这是通过将一个程序的标准输出重定向到另一个程序的标准输入来实现的,通常是通过管道操作符(|)。这使得标准错误仍然连接到终端。用户可以选择在终端本身中查看发送到该流的数据,或者将其重定向到日志文件或/dev/null,任何用户想要的。请注意,发送到stderr的数据不一定是错误消息;它只是与程序的实际输出分开的数据。

支持这种范例对于程序的可用性非常重要,因为它为程序的输入、输出和消息提供了一个可预测的用户界面。用户可以在他们认为合适的时候操作这些,而且通常有趣的应用程序会以意想不到的方式出现。

因此,一般而言,标准输出用于实际输出,标准错误用于与用户通信。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22310012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档