用于检查连接的串行端口的Bash脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于检查连接的串行端口的Bash脚本相关的知识,希望对你有一定的参考价值。

我有一个用串口连接的设备。我有一个与之对话的python程序。但这必须通过bash脚本启动,该脚本将首先检查它连接到哪个串口,并提供必要的权限。然后它将启动python脚本,它应该有一个机制来了解它连接到哪个端口(就像通过bash脚本传递给它的参数)。

目前我的bash脚本是

#script
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB1
sudo chmod 666 /dev/ttyUSB2

如果设备连接到ttyUSB1,我得到第一行的错误chmod: cannot access ‘/dev/ttyUSB0’: No such file or directory。这就是我知道它连接到USB1的方式。 python程序有一行ser=serial.Serial('/dev/ttyUSB1',115200, timeout=1),一旦我知道哪个是正确的串口,我就会手动更改。

如何检查设备连接到哪个端口,并通知python程序?

答案

由于您使用chmod,您可以使用$检查退出代码?并包含一个if语句来打破脚本并加载python。

举个例子:

#!bash
sudo chmod 666 /dev/ttyUSB0
if [$? = 0]
   then 
    pythonscript /dev/ttyUSB0

里程可能会有所不同,非常hacky。您可能也想要使用

if [ -f /dev/ttyUSB0 ]

假设文件仅在连接设备时存在。我没有具体的经验,因此我不会推测轮询作为文件的长期可行性。我遇到了未附加设备和/ dev /中现有条目的问题,所以要密切注意这一点。

参考资料进一步阅读:

http://www.tldp.org/LDP/abs/html/exit-status.html

http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

另一答案

您可以使用AWK解析dmesg输出,并通过参数将结果传递给Python脚本。

例如,此命令将端口名称传递给脚本print_argument.py

dmesg | awk '$0 ~ "attached to ttyUSB.+$" { dev[$NF] = 1 } $0 ~ "disconnected from ttyUSB.+$" { delete dev[$NF] } END { for(i in dev) print i }' | xargs python print_argument.py

所以如果你的dmesg输出看起来像这样:

[ 5847.898803] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 5847.898835] ftdi_sio 1-5.1:1.0: device disconnected
[ 5979.369955] usb 1-1: new full-speed USB device number 21 using xhci_hcd
[ 5979.512177] usb 1-1: New USB device found, idVendor=0403, idProduct=6001
[ 5979.512184] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5979.512187] usb 1-1: Product: FT232R USB UART
[ 5979.512191] usb 1-1: Manufacturer: FTDI
[ 5979.512194] usb 1-1: SerialNumber: A901E5L7
[ 5979.514985] ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
[ 5979.515064] usb 1-1: Detected FT232RL
[ 5979.515574] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB1

print_argument.py包含:

import sys
print ('/dev/' + sys.argv[1])

上面命令的Python脚本输出将是:

/dev/ttyUSB1

以上是关于用于检查连接的串行端口的Bash脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中检查远程端口状态 [重复]

如何验证两个 unix 主机之间的端口连接? [复制]

如何创建一个 bash 脚本来检查 SSH 连接?

Python串行端口在传输中省略字符

一个bash脚本,用于使用bash脚本连接字符串并在同一文件中编辑一行

用于检查特定 php 进程是不是正在运行的 Bash 脚本?