Используя python, как проверить, загружен ли модуль? - PullRequest
0 голосов
/ 30 августа 2018

В настоящее время я работаю над проектом, который включает в себя Up-Board с запущенным ubilinux, подключенным к трем USB-устройствам. Мы были свидетелями проблем, когда плата видит отключение USB-устройства. Когда USB-устройство повторно подключается, оно загружает модули USBSerial и FTDI_sio, что является проблемой. Прежде чем программа сможет проверить наличие подключенных устройств, мне нужно запустить

sudo /sbin/rmmod usbserial
sudo /sbin/rmmod ftdi_sio

Я не хочу, чтобы программа постоянно выполняла эти операции, поэтому я создал поток, который ищет подключаемое USB-устройство. Для этого я использую pyudev.

Моя проблема в том, что мне не всегда нужно выполнять rmmod для usbserial и ftdi_sio, так как они не всегда загружаются, когда подключено USB-устройство. Есть ли способ запустить проверку, написанную на python, чтобы определить, загрузились ли ftdi_sio и usbserial?

Я выполнил несколько поисков и нашел несколько ссылок, которые показывают, как это сделать в виде bash-скрипта, но я пытаюсь выяснить, могу ли я сделать это на python. Я также, кажется, получаю большое количество результатов поиска для загрузки модулей Python, что не очень полезно.

1 Ответ

0 голосов
/ 30 августа 2018

Вот код 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, похоже, работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...