Java:将 stdout 和 stderr 编程为某种处理程序

发布于 2024-10-04 03:16:31 字数 163 浏览 6 评论 0原文

有没有办法逐行捕获我的Java程序的stdout和stderror?

也许类似于使用 addHandler 将处理程序添加到 Logger 实例的方式。

编辑:我不想替换默认处理程序 - 我仍然需要输出显示在命令行上。

Is there a way to capture the stdout and stderror of my Java program line by line?

Perhaps something similar to the way you can add a handler to a Logger instance using addHandler.

edit: I don't want to replace the default handlers--I still need the output to show up on the command line.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沫尐诺 2024-10-11 03:16:31

通过使用 系统.setOut()System.setErr() 您可以将标准输出和错误流设置为任何 PrintStream,并捕获所有内容。

添加:
我不知道是否存在任何优雅的方法来做到这一点,但一种方法是:
1.保存默认输出流
PrintStream defaultOut = System.out;
(System.getOut() 会很有趣)
2. 将 System.out 重定向到您想要的打印流(例如任何文件)
3. 不要使用 System.out.println(),而是使用打印函数,该函数执行以下操作:
打印(对象o){
defaultOut.println(o);//假设defaultOut在此函数中可见
System.out.println(o);
}

By using System.setOut() and System.setErr() you can set standard output and error stream to any PrintStream, and capture everything.

ADDITION:
I don't know if there exist any elegant way to do this, but one way to do so is:
1. Save default output stream
PrintStream defaultOut = System.out;
(System.getOut() would be fun to have though)
2. Redirect System.out to the printstream you want (e.g. any file)
3. Instead of using System.out.println() use your print function, which does following:
print(Object o){
defaultOut.println(o);//Assuming that defaultOut is visible in this function
System.out.println(o);
}

请远离我 2024-10-11 03:16:31

System.setOutSystem.setErr 方法允许您更改 System.outPrintStream 对象System.err 变量引用。您可以使用它们将默认的 PrintStream 对象替换为捕获输出的对象,或者对其执行任何您想要的操作。

跟进

我不想替换 PrintStreams,因为我仍然需要输出才能转到命令行。

您的代码可以处理此问题:

  1. 创建 OutputStream 的子类,将所有输出写入另一个 OutputStream 实例,并捕获输出。使“其他”实例成为构造函数参数。
  2. 获取 System.outSystem.err 的当前值。
  3. 实例化您的子类两次,分别使用 System.outSystem.err 值作为构造函数参数。
  4. 将这两个实例包装为 PrintStream 实例。
  5. 调用 System.setOutSystem.setErrSystem.outSystem.err 替换为 PrintStream 实例。

The methods System.setOut and System.setErr allow you to change the PrintStream objects that the System.out and System.err variables refer to. You can use them to replace the default PrintStream objects with objects that capture output, or do whatever you want with it.

FOLLOWUP

I don't want to replace the PrintStreams because I still need the output to go to the command line.

Your code can take care of that:

  1. Create a subclass of OutputStream that writes all output to another OutputStream instance, and also captures the output. Make the "other" instance a constructort parameter.
  2. Get the current values of System.out and System.err.
  3. Instantiate your subclass twice, with the System.out and System.err values as constructor parameters respectively.
  4. Wrap those two instances as PrintStream instances.
  5. Call System.setOut and System.setErr to replace System.out and System.err with the PrintStream instances.
别闹i 2024-10-11 03:16:31

消息控制台允许您在文本窗格中显示输出并显示它在命令行上。

The Message Console allows you to display output in a text pane and display it on the command line.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文