我构建了一个交互式EXE
,这意味着您可以连续向其发送新命令,它将对其进行处理。
可以根据this的答案在Java
中实现此操作的自动化。但是,在发送命令时,代码将不会等到命令完成。相反,它将立即将控件返回给调用方,这可能会导致race conditions
:如果发送的命令应该写入文件,则可能在访问文件之前尚未创建文件。如何发送命令,读取输出,并且一旦再次期望输入命令,sendCommand()
调用就会返回?
public synchronized void sendCommand(String command) throws IOException
{
byte[] commandBytes = (command + "\n").getBytes(UTF_8.name());
outputStream.write(commandBytes);
outputStream.flush();
}
最好同时也返回过程输出。这将是非交互式shell命令的默认行为,该命令一旦完成执行便会终止。 read()
无限期阻塞,直到进程终止,并且我不想硬编码预期的进程输出或类似的hacks的长度来规避此缺点。
答案 0 :(得分:0)
我决定重新编写二进制文件以使其不再是交互式的。事实证明,预期的性能提升是微不足道的,因此没有更多的理由保持它的交互性并增加实施麻烦。