我正在尝试使用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?
但我仍然无法弄清楚我应该怎么做才能解决这个问题。我觉得它一定很简单,但经过几个小时的研究,我无法弄清楚该怎么做。
答案 0 :(得分:1)
您可以使用UUCP包中的命令 cu ,而不是 screen 。
安装UUCP包sudo apt-get install uucp
或sudo yum install uucp
。
然后使用此命令:
static String command = "cu -l " + port + " -s " + baudRate;
一些解释:
答案 1 :(得分:0)
您的描述表明您只需要访问串行端口上收到的流。您表明您希望使用shell命令来访问该端口。为什么不使用cat ...
将从端口接收的内容发送到标准输出。
如果这样可行,那么为什么不能直接打开串口并直接读取它?
使用screen
似乎会引入此窗口管理器提供的所有不可能正确处理的全屏处理。例如,什么终端类型应该屏幕格式化输出?