說我有一個函數。它打印輸出到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. 將PowerShell輸出附加到Excel文件
- 3. 將輸出附加到文件?
- 4. 輸出附加到文件
- 5. 將輸出附加到文件時出現奇怪的錯誤
- 6. 將函數輸出附加到幾個列表的Python方法
- 7. 附加subprocess.Popen輸出到文件?
- 8. R5RS Scheme輸入輸出:如何將文本寫入/附加到輸出文件?
- 9. 如何將java輸出附加到文本文件?
- 10. 將換行符附加到shell腳本中的輸出文件
- 11. 如何將控制檯輸出附加到maven中的文件?
- 12. 將函數附加到.jstree
- 13. 將變量名稱和日期附加到PowerShell文件輸出
- 14. Python:將egrep輸出附加到文件中
- 15. Linux將控制檯輸出附加到日誌文件?
- 16. 將字符串附加到`puts`輸出
- 17. 將log4j2輸出附加到TextArea
- 18. Java ResultSet.getTimestamp()將毫秒附加到輸出
- 19. 將文件附加到文件中的輸入
- 20. 如何將任何函數參數附加到Python中的輸出列表
- 21. 將文件附加到PHPMailer
- 22. 將文件附加到PDF
- 23. 將數據附加到json文件php
- 24. 將數據附加到XML文件
- 25. 希望將數據附加到文件
- 26. 將數據附加到文件
- 27. 無法將數據附加到文件
- 28. 將源代碼中的std :: clog移動到輸出文件
- 29. 如何將文件附加到輸入類型文件字段
- 30. 如何將EventEmitter輸出附加到路由下的組件?
我有一個函數。 – 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