Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python如何检查模块是否已加载?_Python_Linux - Fatal编程技术网

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

使用python如何检查模块是否已加载?,python,linux,Python,Linux,我目前正在从事一个项目,该项目涉及一个运行ubilinux的主板,连接到三个usb设备。我们目睹了电路板发现usb设备断开连接的问题。当usb设备重新连接时,它会加载USBSerial和FTDI_sio模块,这是一个问题。在程序检查是否存在连接的设备之前,我需要运行 sudo /sbin/rmmod usbserial sudo /sbin/rmmod ftdi_sio 我不希望程序不断地执行这些操作,所以我所做的就是创建一个线程来查找正在插入的usb设备。我正在使用Pudev来完成这个任务

我目前正在从事一个项目,该项目涉及一个运行ubilinux的主板,连接到三个usb设备。我们目睹了电路板发现usb设备断开连接的问题。当usb设备重新连接时,它会加载USBSerial和FTDI_sio模块,这是一个问题。在程序检查是否存在连接的设备之前,我需要运行

sudo /sbin/rmmod usbserial
sudo /sbin/rmmod ftdi_sio
我不希望程序不断地执行这些操作,所以我所做的就是创建一个线程来查找正在插入的usb设备。我正在使用Pudev来完成这个任务

我的问题是,我不必总是为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脚本中运行checker脚本(通常用bash或..编写),就像这样
os.system(“/path/to/script.sh”)
。因此我确信您在搜索中找到了一些基于
modinfo
lsmod
的解决方案。运行这样的东西:但是通过python就足够了吗?如果可以的话,我可以用Popen写一些小东西。可能是、、等的副本。这就是我要找的。我将把它整合到我的代码中并进行测试。我以前从未用过波本。我会仔细阅读的。谢谢你的支持,不客气。值得注意的是,
Popen
是对
子流程
模块中各种内容的底层调用。我通常更喜欢它,因为它提供了更细粒度的控制。其余的,如果您还没有找到,可以在这里找到: