diff --git a/devices/__init__.py b/devices/__init__.py new file mode 100644 --- /dev/null +++ b/devices/__init__.py @@ -0,0 +1,35 @@ +import subprocess +import json + + +def get_storage_devices(removable=None, device_type=None): + """ + :param removable: if True return only removable devices, if False only non-removable. If None return all devices + :param device_type: type of the devices to list + :return: list(tuple(str, str, str)) + first tuple item is device name, second identifying string(VENDOR + MODEL), third - size + """ + proc = subprocess.Popen( + ['lsblk', '-dJo', 'NAME,RM,TYPE,VENDOR,MODEL,SIZE'], stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + if proc.wait() == 0: + result = proc.stdout.read() + result = json.loads(result.decode('utf')) + rval = [] + for device in result['blockdevices']: + if removable and device['rm'] == '0': + continue + if removable == 'False' and device['rm'] == '1': + continue + if device_type is not None and device['type'] != device_type: + continue + rval.append(( + device['name'], + '{} {} {}'.format(device['vendor'].strip(), device['model'].strip(), device['size']), + device['size'] + )) + + return rval + else: + return []