【问题标题】:Adding parameters to Runtime.getRuntime()?向 Runtime.getRuntime() 添加参数?
【发布时间】:2011-04-06 06:07:02
【问题描述】:
void restartWeb() {
        try {
            String[] command = new String[] {"webRestarter.exe" , ">>","webLog.log"};
            Runtime.getRuntime().exec(command);
        } catch (java.io.IOException err) {
        webServer.logError(err.getMessage());
        }
    }

为什么这不起作用?我怎样才能修复它,让它像我想要的那样工作?

-- 执行带参数的webRestarter.exe >>webLog.log

所以它会吐出这样的东西:

webRestarter.exe>>webLog.log

【问题讨论】:

    标签: java arguments parameter-passing optional-parameters


    【解决方案1】:

    只是想我会提到两件可能对使用流程很方便的事情。

    1. ProcessBuilder 是获得流程的好方法(在 旨在在 1.5+ JRE 中运行的代码)。

    2. 建议谨慎 阅读并实施所有 When Runtime.exec() won't的推荐。

    【讨论】:

      【解决方案2】:

      您根本不能在exec 调用中使用管道。管道是 shell 的功能,而不是操作系统的功能。所以我们必须调用 shell 可执行文件并传递命令。试试这个:

      String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"};
      

      【讨论】:

        【解决方案3】:

        如果我没记错的话,管道、重定向等都是 shell 的功能。在这种情况下,这些只是论据。您可以像在命令中使用带有 /c 开关的 cmd.exe 一样简单地处理这个问题,我相信它会正确处理这个问题,或者自己处理标准输入/输出(尽管众所周知这充满了问题,但我更喜欢像commons-exec)。

        【讨论】:

          【解决方案4】:

          参数直接传递给 webRestarter.exe 命令。您不能使用参数将标准输出重定向到文件,因为这通常由命令行解释器完成。

          但是,exec() 方法返回一个 Process 对象,您可以使用它来检索标准输出并将其写入文件。

          来源:

          http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

          http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

          【讨论】:

            猜你喜欢
            • 2021-12-28
            • 2012-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-15
            • 2017-12-02
            相关资源
            最近更新 更多