diff --git a/pupy/modules/ip.py b/pupy/modules/ip.py index d9b64606..4d650933 100644 --- a/pupy/modules/ip.py +++ b/pupy/modules/ip.py @@ -36,10 +36,13 @@ class IPModule(PupyModule): continue color = "" - if addr in data['stats'] and not data['stats'][addr].get('isup'): - color = 'darkgrey' - elif not any([ x.get('family') == socket.AF_INET for x in addresses ]): - color = 'grey' + if 'stats' in data and data['stats']: + if addr in data['stats'] and not data['stats'][addr].get('isup'): + color = 'darkgrey' + elif not any([ x.get('family') == socket.AF_INET for x in addresses ]): + color = 'grey' + else: + color = 'white' self.stdout.write(colorize(addr.ljust(addrlen), color or 'cyan')) first = True diff --git a/pupy/modules/ps.py b/pupy/modules/ps.py index 981e1345..770671dd 100644 --- a/pupy/modules/ps.py +++ b/pupy/modules/ps.py @@ -65,7 +65,8 @@ def gen_columns(record, colinfo): columns['memory_percent'] = '{:3}%'.format(int(mem)) if mem is not None else ' '*4 if colinfo: - columns['username'] = '{{:{}}}'.format(colinfo['username']).format(columns['username']) + if 'username' in colinfo: + columns['username'] = '{{:{}}}'.format(colinfo['username']).format(columns['username']) columns['pid'] = '{{:{}}}'.format(colinfo['pid']).format(record['pid']) else: columns['pid'] = '{}'.format(parent) diff --git a/pupy/packages/all/pupyps.py b/pupy/packages/all/pupyps.py index ec354b7f..461014af 100644 --- a/pupy/packages/all/pupyps.py +++ b/pupy/packages/all/pupyps.py @@ -198,21 +198,34 @@ def connections(): return connections +def _tryint(x): + try: + return int(x) + except: + return str(x) + def interfaces(): - return { - 'addrs': { + try: + addrs = { x:[ - { k:v for k,v in z.__dict__.iteritems() } for z in y + { k:_tryint(getattr(z,k)) for k in dir(z) if not k.startswith('_') } for z in y ] for x,y in psutil.net_if_addrs().iteritems() - }, - 'stats': { + } + except: + addrs = None + + try: + stats = { x:{ - k:v for k,v in ( - y.__dict__.iteritems() if hasattr(y, '__dict__') else - zip(('isup', 'duplex', 'speed', 'mtu'), y) - ) + k:_tryint(getattr(y,k)) for k in dir(y) if not k.startswith('_') } for x,y in psutil.net_if_stats().iteritems() } + except: + stats = None + + return { + 'addrs': addrs, + 'stats': stats } def cstring(string):