当 stdout / stderr 重定向时,是否有标准的 Java 方法来读取/写入 tty?

问题描述 投票:0回答:1

许多 Unix 程序(例如

mysql
expect
)能够直接向用户的
tty
发送消息,绕过重定向的 stdout 和 stderr 流。例如,
mysql
可以打印密码提示,
expect
send_tty

Java 中有内置方法可以执行此操作,还是我手动打开

/dev/tty
并写入它的唯一选择?

我尝试使用 System.console() 方法,但是当标准流重定向时,console() 为 null。

这就是我目前正在使用的,这并不可怕,但肯定比

System.out.println()
更复杂。

      try {
        FileWriter tty = new FileWriter("/dev/tty", true);
        tty.write("This will always appear in the tty.\n");
        tty.flush();
        tty.close();
      } catch (Exception e) {}
java tty
1个回答
0
投票

在 Java 22 之前,没有标准/内置解决方案。

在 Java 22 中...来自 发行说明 ...

JLine
作为默认控制台提供程序 (JDK-8308591)


System.console()
在此版本中已更改为返回带有 增强的编辑功能可改善程序的体验 使用
Console
API。此外,
System.console()
现在返回一个
Console
对象当标准流被重定向或连接时 到虚拟终端。 在之前的版本中,
System.console()
返回
null
对于这些情况。此更改可能会影响使用 return 的代码 从
System.console()
测试虚拟机是否连接到终端。如果 需要,使用
-Djdk.console=java.base
运行将恢复旧版本 仅当连接到控制台时才返回控制台的行为 终端。

添加了一个新方法

Console.isTerminal()
来测试控制台是否 连接到终端。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.