void restartWeb() {
try {
String[] command = new String[] {"webRestarter.exe" , ">>","webLog.log"};
Runtime.getRuntime().exec(command);
} catch (java.io.IOException err) {
webServer.logError(err.getMessage());
}
}
为什么这不起作用?我怎么能解决它,所以它确实像我想要的那样工作?
- 使用参数>> webLog.log
执行webRestarter.exe所以它会吐出这样的东西:
webRestarter.exe>>webLog.log
答案 0 :(得分:5)
您无法在exec
来电中使用管道。管道是shell的功能,而不是操作系统的功能。所以我们必须调用shell可执行文件并传递命令。试试这个:
String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"};
答案 1 :(得分:1)
参数直接传递给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
答案 2 :(得分:1)
如果我没弄错的话,管道,重定向等都是shell的功能。在这种情况下,这些只是争论。您可以像处理命令一样使用带有/ c开关的cmd.exe来处理这个问题,我相信它会正确处理这个问题,或者自己处理标准输入/输出(虽然这是出了问题,但我更喜欢像commons-exec)。
答案 3 :(得分:0)
以为我会提到两个可能对使用Processes很方便的东西。
建议小心 阅读并实施 all 建议什么时候 Runtime.exec()不会。