我有使用JNI运行java程序的C ++ DLL,我正在试图弄清楚如何捕获该java程序的输出。我已经尝试使用stringstream将stdout重定向到缓冲区,但这似乎只是抓住来自我的dll的输出。我该怎么做才能在System.out中阅读?
这就是我现在正在尝试的,但这不起作用:
using namespace std;
stringstream buffer;
streambuf * old = cout.rdbuf(buffer.rdbuf());
//run java stuff here
执行此操作后,buffer.str()
仍然为空,即使java方法正确执行并且在这些方法中存在System.out.println()调用。如果我执行cout << "test" << endl;
之类的操作,buffer.str()会获取该文本,因此它似乎不是缓冲区的问题。我有什么选择?
答案 0 :(得分:1)
通过修改cout
缓冲区,您没有修改标准输出流,只修改了用于封装它的对象。
要完全重定向输出,您必须freopen
stdout
到文件或管道,您可以在此question中获得更多信息。
然后,要获得java代码的完整输出,您可以在阅读模式下打开相同的文件(或管道),只需获取所需的信息。
顺便说一句,在您的代码示例中,您不需要stringstream
,只需要关联的stringbuf
否?