尝试使用pyudev制作一个程序来监视usb驱动器连接。下面是代码:
def __init__(self):
self.window = gtk.Window()
self.window.set_default_size(300, 300)
self.vbox= gtk.VBox(False, 5)
label = gtk.Label("Please plug the device")
context = Context()
monitor = Monitor.from_netlink(context)
monitor.filter_by(subsystem='block',device_type='disk')
observer = GUDevMonitorObserver(monitor)
observer.connect("device-added",self.device_connected)
monitor.start()
self.vbox.pack_start(label)
self.window.add(self.vbox)
self.window.show_all()
def device_connected(self, device):
self.window.remove(self.vbox)
label = gtk.Label('{0!r} added'.format(device))
self.vbox.pack_end(label)
self.window.add(self.vbox)
回溯:
vineet@vineet:~/Documents/Project$ python project.py
TypeError: device_connected() takes exactly 2 arguments (3 given)
TypeError: device_connected() takes exactly 2 arguments (3 given)
请帮我纠正这个错误。
我正在尝试使用文档页面上给出的代码片段。正如您将注意到的,device_connected
方法有参数- device_connected(observer,device)
,但在这种情况下代码也不能工作。它返回并抛出相同的错误。但我一开始就想知道它是如何运作的。类的每个方法不都应该有self
作为参数吗?
文档没有说这些是类的方法,而是由该类发送的信号。(实际上文档使用的名称是"device-added",这在Python中甚至不是一个有效的函数名。)
该函数应该是一个独立的函数,您将其注册为该信号的侦听器。您可以在页面顶部的代码片段中看到如何将信号连接到观察者的示例。