gpt4 book ai didi

java - 使用 apache commons exec 运行交互式命令

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:36 24 4
gpt4 key购买 nike

我想使用 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 commons exec 执行它:

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();
}
}

正如我所说,它基本上可以工作,我得到“=>”提示,但是当我输入一些东西时,直到我按回车键才看到它。我正在使用 cmd 提示符在 Windows 7 上执行此操作。对于如何实现所需行为的任​​何提示,我将不胜感激。

编辑:它在 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");

谢谢

劳尔

最佳答案

我不确定您期望这里发生什么;如果生成的进程被设计为等待读取其输入,那么当它完全那样做时就不足为奇了吗?

如果这是问题所在,而您的问题是“如何让我的程序自动将换行符发送到生成进程的输入?”,那么您需要定义一个 OutputStream 来将输入写入并获取 ExecuteStreamHandler 以将其附加到进程。类似于以下内容:

Executor ex = new DefaultExecutor();

// Create an output stream and set it as the process' input
OutputStream out = new ByteArrayOutputStream();
ex.getStreamHandler().setProcessInputStream(out);
...
try
{
ex.execute(cl);
out.write("\n".getBytes()); // TODO use appropriate charset explicitly
...

关于java - 使用 apache commons exec 运行交互式命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com