gpt4 book ai didi

python - 使用python如何检查模块是否已加载?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:20 24 4
gpt4 key购买 nike

我目前正在从事一个项目,该项目涉及一个运行 ubilinux 的 Up-board 连接到三个 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 开始,但这并没有按预期工作。 modinfo 将显示模块信息,无论它是否已加载。不过,lsmod 方法似乎效果很好。

关于python - 使用python如何检查模块是否已加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com