代码之家  ›  专栏  ›  技术社区  ›  Kyle

将参数添加到运行时.getRuntime()?

  •  1
  • Kyle  · 技术社区  · 15 年前
    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带参数;日志.log

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

    webRestarter.exe>>webLog.log
    
    4 回复  |  直到 15 年前
        1
  •  5
  •   Andreas Dolk    15 年前

    你不能在一个地方使用管道 exec 打电话。管道是shell的功能,而不是操作系统的功能。所以我们必须调用shell可执行文件并传递命令。请尝试以下操作:

    String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"};
    
        2
  •  1
  •   Vivien Barousse    15 年前

    参数直接传递给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

        3
  •  1
  •   Danny Thomas    15 年前

    如果我没弄错的话,管道、重定向等都是shell的函数。在这种情况下,这些只是论点。你可以像使用命令行使用a/c开关作为命令的一部分,我相信它会正确地处理这个问题,或者自己处理标准的输入/输出(尽管这是出了名的充满问题,我更喜欢commons exec之类的东西)。

        4
  •  0
  •   Andrew Thompson    15 年前

    我想我应该提到两件事,这两件事对于处理流程可能很方便。

    1. ProcessBuilder 是获得过程的好方法(在

    2. 建议仔细检查 全部的 When Runtime.exec() won't .