首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何监控usb设备的插入?

如何监控usb设备的插入?
EN

Stack Overflow用户
提问于 2018-06-24 06:54:24
回答 1查看 3.8K关注 0票数 1

当USB设备插上电源时,我正试图监视它们。有几个测试脚本失败了,我很确定这是应该有效的。

代码语言:javascript
运行
复制
import pyudev

context = pyudev.Context()
monitor = pyudev.Monitor.from_netlink(context)
monitor.filter_by(subsystem='usb')

for device in iter(monitor.poll, None):
    if device.action == 'add':
        print('{} connected'.format(device))

^^什么都不做。没有错误,没有输出。

我试着

代码语言:javascript
运行
复制
import dbus
bus = dbus.SystemBus()
obj = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
obj.GetDevices()

输出以下错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "crap.py", line 4, in <module>
    obj.GetDevices()
  File "/usr/lib/python3/dist-packages/dbus/proxies.py", line 70, in __call__
    return self._proxy_method(*args, **keywords)
  File "/usr/lib/python3/dist-packages/dbus/proxies.py", line 145, in __call__
    **keywords)
  File "/usr/lib/python3/dist-packages/dbus/connection.py", line 651, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: No such interface '(null)' on object at path /org/freedesktop/NetworkManager

dbus在Linux Mint和Pi3上都阻止了我。

如何监视python3中的USB设备?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-24 15:36:03

pyudev访问linux udevadm工具。使用此设备,使用udevadm monitor监视附加/分离事件

如果使用python子进程调用调用udevadm monitor会发生什么?

代码语言:javascript
运行
复制
  from subprocess import call
  call(["udevadm","monitor"])

如果您使用来自pyudev的MonitorObserver会发生什么?

您试过将python (脚本)作为root调用吗?

下面两个变体不带根,并以-i选项作为脚本调用:

代码语言:javascript
运行
复制
from pyudev import Context, Monitor

context = Context()
monitor = Monitor.from_netlink(context)
device = monitor.poll(timeout=None)
if device:
    print('{0.action}: {0}'.format(device))

-

代码语言:javascript
运行
复制
from pyudev import Context, Monitor, MonitorObserver

context = Context()
monitor = Monitor.from_netlink(context)
monitor.filter_by(subsystem='usb')
def print_device_event(device):
    print('background event {0.action}: {0.device_path}'.format(device))
observer = MonitorObserver(monitor, callback=print_device_event, name='monitor-observer')
observer.daemon
observer.start()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51007632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档