我想用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