【问题标题】:How can I handle large console output in Windows 7?如何在 Windows 7 中处理大型控制台输出?
【发布时间】:2015-12-15 13:48:21
【问题描述】:

我正在使用基于 Java 的应用程序。当它启动时,它会打开一个控制台并将其输出写入那里。

但是,有时输出大到无法容纳控制台窗口(控制台窗口最多有 10000 行),输出大 10 倍以上。

我已经尝试下载其他控制台应用程序(如 con Emu),但那里的最大行数(大约 32760)也太小了。

我的 PC 上有 Ultra Edit,它可以捕获 DOS 命令输出,但是在调试程序时,我无法从简单的文本编辑器对话框中启动调试会话。

现在我有几个解决方案:

  • 将已运行进程的控制台窗口的输出重定向到我系统上的本地文件。
  • 还没有找到另一个不受预定义值限制的控制台仿真工具。
  • 自己开发 sych 一个控制台仿真工具(最好使用 Python、Java 或 Visual Basic),但为了做到这一点,我需要从 Windows 7 API 了解如何开始这样做。

有人能让我走上正轨吗?

谢谢

【问题讨论】:

  • 我只是将所有内容发送到文件中。这有什么问题?
  • 你能编辑java应用吗?
  • IMO,如果您的输出超过 1000 行,则标准输出不是要走的路...我会将其存储在一个文件中,如果需要标准输出,您可以将其拆分为 10000 行的块(就像 linux 中的 more 或 less)
  • 应用程序是否总是分配一个新的控制台,还是在从命令提示符启动时重用控制台?如果是后者,只需使用 > 运算符将输出重定向到文件。

标签: java python winapi windows-7 console


【解决方案1】:

如果它是您所说的 Java 应用程序,您可能可以将启动包装在您自己的类中,将 System.out 和 System.err 替换为基于 TeeOutputStreams 的东西,这将打印到控制台(您从 System.out 的值之前保存的内容)并保存到您设置的日志文件中。

像这样:

public class LogWrapper {
    public static void main(String[] args) {
        PrintStream out = System.out;
        PrintStream err = System.err;

        System.setOut(new TeePrintStream(out, new PrintStream("system.out.log")));
        System.setErr(new TeePrintStream(err, new PrintStream("system.err.log")));

        the.original.ClassYouWereCalling.main(args);
    }
}

注意:TeePrintStream 你还得做...

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2010-10-09
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多