#!/usr/bin/python3 import pyudev import psutil import time import os context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by('block') autoMount=False def printDeviceInfo(dev): print('') print('') print('Device name: %s' % dev.get('DEVNAME')) print('Device type: %s' % dev.get('DEVTYPE')) print('Bus system: %s' % dev.get('ID_BUS')) print('Partition label: %s' % dev.get('ID_FS_LABEL')) print('FS: %s' % dev.get('ID_FS_SYSTEM_ID')) print('FS type: %s' % dev.get('ID_FS_TYPE')) print('Device usage: %s' % dev.get('ID_FS_USAGE')) print('Device model: %s' % dev.get('ID_MODEL')) print('Partition type: %s' % dev.get('ID_PART_TABLE_TYPE')) print('USB driver: %s' % dev.get('ID_USB_DRIVER')) print('Path id: %s' % dev.get('ID_PATH')) #print('Capacity: %s' % stdOut[0].strip()) print('') # enumerate at device connection for device in iter(monitor.poll, None): if 'ID_FS_TYPE' in device: if device.action == 'add': if device.device_node[5:7] == 'sd' and device.get('DEVTYPE')=='partition': printDeviceInfo(device) print("New device {}".format(device.device_node)) # loop until device is mounted if autoMount: found=False loop=0 while (not found) and (loop<10): # need to sleep before devide is mounted time.sleep(1) for partition in psutil.disk_partitions(): if partition.device == device.device_node: print("Mounted at {}".format(partition.mountpoint)) found=True loop+=1 else: print("mount device to /media/box") res=os.system("pmount "+device.device_node+" box") print("Return type: ", res) if device.action == 'remove': if device.device_node[5:7] == 'sd' and device.get('DEVTYPE')=='partition': print('Device removed') if not autoMount: print("unmount device /media/box") res = os.system("pumount /media/box") print("Return type: ", res)