我想用apache commons exec運行交互命令。除了當我的命令被執行並等待用戶輸入時,除了當我按下回車使其無法使用時,我在控制檯中看不到我的輸入時,一切都可以正常工作。用apache commons運行交互命令exec
這是一個互動節目的一個例子:
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while (true) {
System.out.print("=> ");
try {
line = in.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(line);
}
}
現在我想執行一個與Apache公地高管是這樣的:
public static void main(String[] args) {
Executor ex = new DefaultExecutor();
ex.setStreamHandler(new PumpStreamHandler(System.out, System.err, System.in));
CommandLine cl = new CommandLine("java");
cl.addArguments("-cp target\\classes foo.bar.Main");
try {
ex.execute(cl);
} catch (ExecuteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
正如我所說的,它基本上是工作,我得到「=>」提示符,但是當我鍵入一些東西時,我纔看到它,直到我按下回車鍵。我在Windows 7上使用cmd提示符執行此操作。 我很感激任何關於如何達到預期行爲的提示。
編輯:它按預期在linux上工作。我想這是Windows cmd提示符的問題。如果可能的話,我仍然希望能夠做到這一點,所以我希望能夠深入瞭解Windows上的這種行爲。
Edit2:我也用msys shell和powershell測試過,都表現出同樣的問題。
Edit3:我通過啓動一個單獨的cmd提示來解決這個問題。這工作,但我仍然想知道爲什麼。
CommandLine cl = new CommandLine("cmd");
cl.addArguments("/C java -cp target\\classes foo.bar.Main");
感謝
拉烏爾
謝謝,但不幸的是,這不是我想要的。我想在輸入內容的時候在我的cmd提示符下得到反饋,而我不知道。當我運行我的例子時,我得到了「=>」提示符,但是當我鍵入一些東西時,它不可見。它顯示出來,當我按下輸入雖然。此外,執行阻塞,直到產生的進程退出,所以我不知道你的例子會做什麼不同的事情?! – 2010-08-17 17:28:01
這並不回答他的問題。 – 2016-06-17 00:58:51