2

我有使用 JNI 运行 java 程序的 C++ dll,我正在尝试弄清楚如何捕获该 java 程序的输出。我尝试使用字符串流将标准输出重定向到缓冲区,但这似乎只获取来自我的 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() 会获取该文本,因此缓冲区似乎没有问题。我在这里有什么选择?

4

1 回答 1

1

通过修改cout缓冲区,您并没有修改标准输出流,只是用于封装它的对象。

要完全重定向输出,您必须到freopen stdout文件或管道,您可以在这个问题中获得更多信息。

然后要获得Java代码的完整输出,您可以在阅读模式下打开相同的文件(或管道)并简单地获取您想要的信息。

顺便说一句,在您的代码示例中,您不需要,stringstream而只需要相关的stringbufno?

于 2013-10-10T14:42:46.230 回答