我有一个包含大量std::cerr
的程序,它直接输出到我的终端。我想知道std::cerr
和std::cout
之间有什么区别。如何禁用std::cerr
(我不希望它输出到我的屏幕)?
答案 0 :(得分:5)
正如其他人所提到的,如果这是一个类Unix系统,那么2> / dev / null会将stderr(2)重定向到天空中的大位桶(/ dev / null)。
但是这里没有人解释stderr和stdout之间的区别是什么,所以我觉得至少有必要触及这个话题。
std :: cout是标准输出流。这通常是您的程序应该输出消息的地方。
std :: cerr是标准错误流。这通常用于错误消息。
因此,如果您的程序“包含大量的cerr”输出,那么可能值得一看为什么正在打印这么多错误消息,而不是简单地隐藏消息。当然,这假设您不会碰巧有一个程序由于某种原因向stderr发出大量非错误输出。
答案 1 :(得分:0)
这篇旧的新闻组帖子展示了如何redirect。 (代码太大,无法在此处发布)。您需要使用streambuf* rdbuf
。
cerr
是类ostream
的对象,表示标准错误流。它与cstdio流stderr
关联。
默认情况下,大多数系统都将其标准错误输出设置为控制台,其中显示了文本消息,但通常可以重定向。
因为cerr
是类ostream
的对象,我们可以使用例如插入运算符(ostream :: operator<<)作为格式化数据或使用无格式数据将字符写入其中写成员函数等(参见ostream)。
答案 2 :(得分:0)
假设此程序在* nix系统上执行,一种可能性是将stderr重定向到/ dev / null。
答案 3 :(得分:0)
2> / dev / null可以解决问题。我需要再次组成30个字符。
答案 4 :(得分:0)
在许多系统中,包括Windows和Unix,有两个standard output streams:stdout和stderr。
通常,程序输出到stdout,可以在屏幕上显示,也可以重定向到文件:program > output.txt
或重定向为另一个程序program1 | program2
的输入。例如,您可以运行grep
,使用program | grep searchword
工具搜索程序的输出。
但是,如果发生错误,并将其打印到重定向的stdout,则用户将看不到它。这就是出现错误的第二个输出的原因。此外,用户通常不希望将错误文本写入输出文件,或者将其提供给grep。
运行程序时,可以将其错误输出重定向到program 2>file
的文件。该文件可以是/ dev / null,或&1
,这意味着重定向到stdout。