【发布时间】:2024-05-01 11:45:02
【问题描述】:
通过MobaXterm 的SSH 功能,我正在远程Linux 服务器上运行Java 应用程序。当我尝试输入终端(通过Scanner 处理用户输入请求)并且发生任何日志记录时,会出现问题。当任何打印语句发生时,我正在输入的文本会自动推送到日志记录部分。
澄清示例:
-
我在控制台中手动输入 "MY_INPUT_TO_SET_SOME_VARIABLE 50"(从不按 ENTER)。
-
在服务器上发生一些日志记录并自动将手动输入的 “MY_INPUT_TO_SET_SOME_VARIABLE 50”“发送”到显示区域。
(在上面,您可以看到 50 附加到 09:08,而我从未按 Enter 键)。
所需的行为是允许高级用户在终端的文本区域(或合理的地方)中简单地键入文本,直到按下 ENTER 键。终端文本区域中的文本不应在记录或打印语句时自动推送。我查看了终端设置,但找不到任何可以修改此行为的内容。
【问题讨论】:
-
看起来很正常。您的提示和日志都打印到标准输出,没有什么可以告诉它阻止(基本上缓冲一些数据),直到用户按 Enter 键。您是否尝试在本地运行类似的东西?
-
我确实在本地对其进行了测试,这似乎是“正常行为”——我输入的文本总是在任何传入日志记录时附加到较大的文本区域。是否无法将我的输入文本与日志记录大文本区域分开? ..说,我总是在新行上输入任何内容并一直留在那里直到我按ENTER?请参阅 (puu.sh/wY6Dp/acafce9e18.png) 和 (puu.sh/wY6Hh/34dfdb4de4.png) 了解详情。
-
最初 console aka 终端是围绕“流”概念设计的,因为这就是原始终端所做的:它们只是打印一个字符流。在“流”概念下,您可以分离多个流并以不同方式打印它们。但是如果你把它们混合成一个单一的输出,你就不能只在其中一个中占有一席之地。当基于显示的终端出现时,添加了基于文本的 UI 功能,例如 ncurses,但这是一项高级功能,即使对于这样一个简单的功能,通常也需要应用程序的明确支持。