说我有一个函数。它打印输出到std.out。有没有办法单独捕获函数的打印输出?然后将捕获的输出附加到文件中。将函数的std输出附加到文件
1
A
回答
1
如果你不想程序输出重定向像a.out >> output.txt
(这将重定向所有输出),您可以重定向std::cout
到一个文件中(假设你也不想修改代码f()
使用fstream
)
简单的例子:
#include <iostream>
#include <fstream>
#include <streambuf>
void f()
{
std::cout << "Say something\n";
}
int main()
{
std::cout << "Writing to file..." << std::endl;
std::ofstream ofile("output.txt", std::fstream::app); // output file
std::streambuf *oldbuf = std::cout.rdbuf(); // save the buffer
std::cout.rdbuf(ofile.rdbuf()); //redirect to output.txt
f(); // call f
// now redirect back
std::cout.rdbuf(oldbuf);
std::cout << "Done writing to file" << std::endl;
}
注:以上的作品,如果你有std::cout
并没有使用prinf
打印。你甚至可以编写一个RAII类类,自动重定向cout
,析构函数重定向回,像这样:
#include <iostream>
#include <fstream>
#include <streambuf>
class RAIIcout_redirect
{
std::streambuf* _oldbuf;
public:
RAIIcout_redirect(std::ofstream& os): _oldbuf(std::cout.rdbuf())
{
std::cout.rdbuf(os.rdbuf());
}
~RAIIcout_redirect()
{
std::cout.rdbuf(_oldbuf);
}
};
void f()
{
std::cout << "Say something\n";
}
int main()
{
std::cout << "Writing to file..." << std::endl;
std::ofstream ofile("output.txt", std::fstream::app); // output file
// local scope, at exit cout is redirected back automatically
{
RAIIcout_redirect tmp(ofile);
f(); // call f
} // now redirect back because of ~RAIIcout_redirect()
std::cout << "Done writing to file" << std::endl;
}
+0
哇,这是一个非常干净的答案。它完美地工作。 – passingbyou 2015-04-06 03:01:18
1
如果您有机会获得功能src时,可以修改签名中的ostream传递到你想要写这个函数。添加一个默认值以最小化对其他调用的影响。
头:
void foo(int x, int y, std::ostream& an_ostream = std::cout);
实现:
void foo(int x, int y, std::ostream& an_ostream)
{
an_ostream << ...
使用了到std ::出来:
foo(1,2);
使用到文件(模拟与字符串流):
std::stringstream ss;
foo(3,4,ss);
输出CERR:
foo(5,6,std::cerr);
抑制输出:
std::ofstream nullDev; // do not open
// set error, ignore errors
nullDev.setstate(std::ios_base::badbit);
// do not close
foo(7,8,nullDev);
0
这是一个疯狂的建议。
- 在函数的每一行输出上添加一个唯一的标记。
- 然后,使用:
a.out | grep <token> | sed -e '1,$s/<token>//' >> output.txt
相关问题
- 1. 将输出附加到文件?
- 2. 如何将输出附加到文件?
- 3. 输出附加到文件
- 4. 将输出附加到文件时出现奇怪的错误
- 5. 将函数输出附加到几个列表的Python方法
- 6. 如何将控制台输出附加到maven中的文件?
- 7. 将换行符附加到shell脚本中的输出文件
- 8. 将函数附加到.jstree
- 9. Linux将控制台输出附加到日志文件?
- 10. 将变量名称和日期附加到PowerShell文件输出
- 11. Python:将egrep输出附加到文件中
- 12. 将文件附加到PHPMailer
- 13. 将数据附加到json文件php
- 14. 将数据附加到XML文件
- 15. 如何将EventEmitter输出附加到路由下的组件?
- 16. Python写入函数输出到文件
- 17. awk将头添加到输出文件
- 18. 将HTML文件加载到输出流
- 19. Perl:将输入文件名添加到输出文件名
- 20. 将onclick函数附加到div jquery
- 21. 将javascript函数附加到rich:dataScroller
- 22. 将函数附加到Matlab结构
- 23. 函数将行附加到.csv
- 24. 将附加函数映射到列表
- 25. Java将新文件的数据附加到旧文件中
- 26. 如何使用makefile将变量的值附加到输出文件
- 27. 将文件附加到邮件
- 28. 将文件附加到电子邮件
- 29. 将PDF文件附加到邮件中
- 30. 将输出数据添加到1个文本文件
我有一个函数。 – 2015-04-06 02:43:12
可能的重复:http://stackoverflow.com/questions/10150468/how-to-redirect-cin-and-cout-to-files – 2015-04-06 03:17:32