def lspci(filtername=None,shortInfo=False): """Get hash of lspci, filtred by filtername. If shortInfo, then type,vendor and name get only first word pcidata(domain,bus,slot,func) 'type' 'vendor' 'name'""" reData = re.compile(r'(\S+)\s"([^"]+)"\s+"([^"]+)"\s+"([^"]+)"',re.S) if filtername: if hasattr(filtername,'__call__'): filterfunc = filtername else: filterfunc = lambda x: filtername in x else: filterfunc = lambda x:x if shortInfo: sfunc = lambda x:x.partition(" ")[0] else: sfunc = lambda x:x lspciProg = checkUtils('/usr/sbin/lspci') processLsPci = process(lspciProg,"-m") retData = {} for device in map(lambda x:x.groups(), filter(lambda x:x, map(reData.search, filter(filterfunc, processLsPci)))): retData[device[0]] = {'type':sfunc(device[1]),\ 'vendor':sfunc(device[2]),\ 'name':sfunc(device[3])} return retData
def getRouteTable(onlyIface=[]): """Get route table, exclude specifed iface""" ipProg = checkUtils('/sbin/ip') routes = process(ipProg,"route") if onlyIface: filterRe = re.compile("|".join(map(lambda x:r"dev %s"%x,onlyIface))) routes = filter(filterRe.search,routes) for line in routes: network,op,line = line.partition(" ") routeParams = map(lambda x:x.strip(),line.split()) # (network,{'via':value,'dev':value}) if network: yield (network,dict(zip(routeParams[0::2],routeParams[1::2])))