我目前正在从事一个项目,该项目涉及运行ubilinux的Up-board,该ubilinux连接到三个USB设备。我们目睹了主板发现USB设备断开连接的问题。当USB设备重新连接时,它将加载USBSerial和FTDI_sio模块,这是一个问题。在程序可以检查是否存在连接的设备之前,我需要运行
sudo /sbin/rmmod usbserial
sudo /sbin/rmmod ftdi_sio
我不希望程序不断执行这些操作,所以我要做的是创建一个线程,寻找要插入的USB设备。我正在使用pyudev来完成此操作。
我的问题是,我不必总是为usbserial和ftdi_sio执行rmmod,因为在连接USB设备时它们并不总是加载。有什么方法可以运行以python编写的检查,以确定是否已加载ftdi_sio和usbserial?
我已经进行了许多搜索,并且找到了许多链接,这些链接显示了如何作为bash脚本来执行此操作,但是我试图找出是否可以在python中执行此操作。加载python模块时,我似乎也获得了大量搜索结果,这并不是很有帮助。
这是一些Popen
代码,以检查是否使用加载了它lsmod
:
import subprocess
def module_loaded(module_name):
"""Checks if module is loaded"""
lsmod_proc = subprocess.Popen(['lsmod'], stdout=subprocess.PIPE)
grep_proc = subprocess.Popen(['grep', module_name], stdin=lsmod_proc.stdout)
grep_proc.communicate() # Block until finished
return grep_proc.returncode == 0
for module_name in ['usbserial', 'ftdi_sio']:
loaded = module_loaded(module_name)
print('Module {} {} loaded'.format(module_name, "is" if loaded else "isn't"))
那里的印刷品只是为了证明它有效;您可以将其替换为您的rmmod
代码。输出:
Module usbserial isn't loaded
ftdi_sio 52791 0
Module ftdi_sio is loaded
我modinfo
从btw开始,但是那没有按预期进行。modinfo
无论是否加载模块,都会显示模块信息。该lsmod
方法似乎效果很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句