【问题标题】:why cant I use log files in java runtime为什么我不能在 java 运行时使用日志文件
【发布时间】:2010-08-22 10:34:24
【问题描述】:

我有(在 java 中),

rt.exec("qq.exe -i ..(some other parameters) > qq.log");//*1

当我在终端中运行 qq.exe -i ..(一些其他参数)> qq.log 它工作正常并保持 qq.log 文件正确。

但是使用 rt.exec (*1) 不起作用。 “ > qq.log”部分导致问题。当我删除该部分时 rt.exec (*1) 有效,但这次我不能有 qq.log 文件。

是什么导致这个问题,有什么解决办法吗??

【问题讨论】:

    标签: java runtime exec runtime.exec


    【解决方案1】:

    rt.exec() 无法执行 sh/bat 代码。它只是调用另一个程序。当您尝试使用特定于 shell 的 > 符号重定向 qq.exe 的输出流时,java 不明白该怎么做。

    另一种方法是当您使用exec 方法执行某个程序时,获取rt.exec() 返回的ProcessProcess 可以为您提供到应用程序的 OutputStream、来自应用程序的 InputStream,甚至为已启动的应用程序提供 ErrorStream。

    使用 InputStream,您可以通过编程方式读取 qq.exe 的结果,只需将其写入文件即可。

    【讨论】:

    • 非常感谢。小修正:不是OutputStream,是InputStream。程序的输出进入 InputStream。 OutputStream 是我们进入程序的输出...
    【解决方案2】:

    Java 7 添加了 ProcesBuilder.Redirect 类,允许将输入/输出/错误流重定向到文件/从文件重定向。可以这样使用:

        ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo");
        // Append all errors from process to log file:
        builder.redirectError(Redirect.appendTo(new File("/tmp/my.log")));
        Process process = builder.start();
    

    使用相应的方法可以重定向输入和输出。完整示例在这里:Run external process in Java 7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2013-06-04
      • 2014-12-24
      • 2023-01-09
      • 2017-12-01
      • 2013-07-05
      相关资源
      最近更新 更多