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

1

В настоящее время я работаю над проектом, который включает в себя Up-board running 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 комментарий
Теги:

1 ответ

1
Лучший ответ

Вот некоторые 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. modinfo будет показывать информацию о модуле независимо от того, была ли она загружена. lsmod подход lsmod работает хорошо.

  • 0
    Это то, что я искал. Я интегрирую его в свой код и протестирую. Я никогда не использовал Попен раньше. Я прочитаю об этом. Спасибо за поддержку.
  • 0
    Пожалуйста. Стоит отметить, что Popen является базовым вызовом для различных вещей в модуле subprocess . Я обычно предпочитаю это, потому что это дает вам более детальный контроль. Остальные, если вы их еще не нашли, можно найти здесь: docs.python.org/3/library/subprocess.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню