gpt4 book ai didi

java - 通过 ProcessBuilder 的(阻塞)交互式 shell

转载 作者:行者123 更新时间:2023-12-02 04:23:05 24 4
gpt4 key购买 nike

我构建了一个交互式EXE,这意味着您可以不断向它发送新命令,它会处理它们。

根据 this,可以在 Java 中实现此自动化。回答。但是,发送命令时,代码不会等到命令完成。相反,它会立即将控制权返回给调用者,这可能会导致竞争条件:如果发送的命令应该写入文件,则该文件可能在访问之前尚未创建。如何发送命令、读取输出以及一旦再次需要某个输入命令,sendCommand() 调用就会返回?

public synchronized void sendCommand(String command) throws IOException
{
byte[] commandBytes = (command + "\n").getBytes(UTF_8.name());
outputStream.write(commandBytes);
outputStream.flush();
}

最好同时返回进程输出。这将是非交互式 shell 命令的默认行为,一旦执行完毕,该命令就会终止。 read()无限期地阻塞,直到进程终止,并且我不想硬编码预期进程输出的长度或类似的黑客来规避这个缺点。

最佳答案

我决定重写我的二进制文件,使其再次成为非交互式的。事实证明,预期的性能提升可以忽略不计,因此没有更多的理由保持其交互性并经历增加的实现麻烦。

关于java - 通过 ProcessBuilder 的(阻塞)交互式 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623129/

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