python - 特定 python 应用程序的安全串行端口

标签 python linux serial-port driver

我有一个使用串行端口 /dev/ttyUSB0 的 python 应用程序(“App1”)。此应用程序作为 Linux 服务运行。它运行得很好,因为它完全自动化地完成了我需要它执行的任务。但是,我最近开始意识到,有时我不小心将同一个串行端口用于我正在开发的另一个 python 应用程序,这会对“App1”造成不必要的干扰。

我确实尝试如下锁定“App1”:

ser=serial.Serial(PORT, BAUDRATE)
fcntl.lockf(ser, fcntl.LOCK_EX | fcntl.LOCK_NB)

但是,对于其他应用程序,我有时会在不知不觉中使用

ser=serial.Serial(PORT, BAUDRATE)

不检查 ser.isOpen()

为了防止这种情况发生,我在处理其他应用程序时想知道,ser=serial.Serial(PORT, BAUDRATE) 是否有办法通知我串口是当我尝试访问它时已经在使用中?

我想出的一个解决方案是创建一个永远运行的 cronjob,它主要检查以下内容:

fuser -k /dev/ttyUSB0 #to get the PID of activated services that uses /dev/ttyUSB0
pkill -f <PID of second application shown in output above> #kill the application belonging to the second PID given by the above command

以上将确保每当两个应用程序使用同一个串行端口时,第二个 PID 将被杀死(我知道此逻辑中存在一些漏洞)。你们有什么感想?如果这不是一个好的解决方案,ser=serial.Serial(PORT, BAUDRATE) 是否有任何方法通知我 /dev/ttyUSB0 已在使用中我尝试访问它还是需要在驱动程序级别实现逻辑?任何帮助将不胜感激!

最佳答案

我认为更简单的做法是为“稳定进程”创建一个不同的用户,并使用普通文件权限授予该用户对 /dev/ttyUSB0 的独占访问权限。 .

有了 Unix 组和仍然简单的权限,其他进程仍然可以访问它需要的任何其他资源,这些资源将在您的主要用户下 - 所以它应该很简单

如果您不知道它们,请查看命令的文档 chownchmod .

关于python - 特定 python 应用程序的安全串行端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208366/

相关文章:

linux - 在文本文件中查找并删除包含多个单词的行

c++ - 因为一行不相关的代码,速度差别这么大

python - 在python中向arduino串口发送信息

c# - 串行端口上的十六进制转换错误

python - 将接下来的 n 次迭代分配给元组

python - 根据 Pandas 中的关键字对列进行分区

android - 如何阻止从 SL4A 启动的 WebView 隐藏通知栏?

c - 如何在Linux中读取文件/文件夹属性?

c - 分割核心错误c

python - 无法将字符串转换为 float