我正在尝试使用 shell 和 java 的组合来读取和写入串行端口。目标是能够使用 PrintWriter 和 BufferedReader 从连接到串行端口的设备发送和接收命令。我知道这可以通过不同的方式完成(不使用 shell),但这不是我想要的。我希望能够使用 shell 和 java 来完成此操作。
这是我的代码:
static String port = "/dev/tty.usbmodem411";
static int baudRate = 9600;
private static String command = "screen " + port + " " + baudRate;
public static void main(String[] args) throws Exception {
System.out.println("Command is " + command);
Process p = Runtime.getRuntime().exec(command);
//p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line = reader.readLine();
while(true)
{
if (line != null) {
System.out.println(line);
}
line = reader.readLine();
}
}
通过这段代码,我专门尝试从串行端口读取数据。我正在使用 java 运行 shell 命令来访问串行端口,然后读取命令的输出。
但是,当我运行此代码时,我总是收到一条消息“必须连接到终端”。我还尝试将行 command = "screen "+ port + ""+ baudRate;
更改为 command = "screen -dm"+ port + ""+ baudRate;
,但后来我没有得到任何输出。我咨询过几个类似的问题,Executing screen command from Java和 How to open a command terminal in Linux?
但我仍然不知道我应该做什么来解决这个问题。我有一种感觉,这一定是非常简单的事情,但经过几个小时的研究,我不知道该怎么做。
最佳答案
您可以使用 UUCP 包中的命令 cu,而不是 screen。
要安装 UUCP 软件包 sudo apt-get install uucp
或 sudo yum install uucp
。
然后使用这个命令:
静态字符串命令 = "cu -l "+ port + "-s "+ baudRate;
一些解释:
- screen -d 分离 session (它在后台运行),这就是您看不到任何数据的原因。
- screen需要终端,这在java中并不容易。请参阅How to open a command terminal in Linux?
关于java - 使用 shell 和 Java 读写串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20767490/