В настоящее время я работаю над проектом, который включает в себя 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, что не очень полезно.
Вот некоторые 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
работает хорошо.
Popen
является базовым вызовом для различных вещей в модуле subprocess
. Я обычно предпочитаю это, потому что это дает вам более детальный контроль. Остальные, если вы их еще не нашли, можно найти здесь: docs.python.org/3/library/subprocess.html
os.system("/path/to/script.sh")
.modinfo
иlsmod
в своем поиске. Будет ли работать что-то вроде этого: stackoverflow.com/questions/9845877/… но через python будет достаточно? Я могу написать что-нибудь маленькое, используяPopen
если так.