为什么换行符(\n)的行为与在Raspbian CLI上按enter不同



我制作了一个应用程序,基本上可以读取数据,并使用system.out.print在raspbian命令行界面(CLI(上打印出来。使用上述方法在CLI上打印文本与打印文本一样有效。

打印完文本后,我希望它也能像按下回车键一样(提交数据(。假设CLI提示您输入一个值,应用程序打印数据,然后我希望应用程序的行为就像用户按enter键一样。

该应用程序是一个守护进程,用于在CLI中打印来自外部设备的数据。它可以而且确实在任何时候打印这些数据——这是有意的。不需要将数据发送到特定的应用程序或一组应用程序,因为命令提示符的应用程序可能每隔x个时间交换一次。使用换行命令时,光标会移到下一行,但其行为并不像用户要按下键盘的回车按钮。

我尝试使用它将光标移动到下一行,但它没有提交数据。最后,我希望数据能够自动输入,而无需用户手动按下输入按钮。

在那之后,我尝试了awt.robot类,但它不起作用,因为它抛出了一个无头异常,在谷歌上搜索了一点后,我相信它与不会在Raspbian上安装和使用的GUI或功能有关。

我也发现有人提到JNA和JNI库,但我找不到任何例子(至少对于linux设备来说没有(来模拟用户的回车键。

这里有一个更具体的例子。CLI提示:

Weight:

守护进程打印0.233。因此CLI将看起来像:

Weight: 0.233

然后,应用程序的行为必须像用户按下回车键一样。使用换行符只会移动光标,而不会表现为用户按下回车按钮,如:

Weight: 0.233
_ (representing cursor).

最小/最简单的可复制示例:

public static void main(String[] args) {
while(true) {
//this moves the cursor to the next line and doesn't enter the line in a prompt.
System.out.println("abc");
//have to time that it goes into a prompt. I have a startup login prompt which I can test it with.
//or whatever suits your needs
Thread.sleep(20000);
}
}

我使用的是java8,树莓版本是8,树树莓版本则是3。

希望有人知道该做什么或者我错过了什么。欢迎任何帮助。

经过多次实验,我发现TTY现在就是这样解释/n的。我有一个旧的Linux安装,它模拟了一个/n作为键盘按压,但在那个rasbian版本中没有这种情况。

所以基本上我必须像键盘一样直接写入正确的IO通道。您无法模拟键盘输入直接按到终端。只能直接写入正确的IO通道或使用键盘模拟器。

最新更新