diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2016-02-09 12:30:45 +0100 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2016-02-09 12:30:45 +0100 |
commit | 4b78815e7bd1354daa34d56e2b12276836b7cdf9 (patch) | |
tree | d79f771fcfbc251c87a1ccc60e129cdf3adfe7ae /scripts/ps.py | |
parent | ab9f29bd2689ac9623e5ac078c880c2fae7743f3 (diff) | |
download | psutil-4b78815e7bd1354daa34d56e2b12276836b7cdf9.tar.gz |
rename 'examples' dir to 'scripts'
Diffstat (limited to 'scripts/ps.py')
-rwxr-xr-x | scripts/ps.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/scripts/ps.py b/scripts/ps.py new file mode 100755 index 00000000..9143a557 --- /dev/null +++ b/scripts/ps.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +A clone of 'ps -aux' on UNIX. + +$ python scripts/ps.py +... +""" + +import datetime +import os +import time + +import psutil + + +def main(): + today_day = datetime.date.today() + templ = "%-10s %5s %4s %4s %7s %7s %-13s %5s %7s %s" + attrs = ['pid', 'cpu_percent', 'memory_percent', 'name', 'cpu_times', + 'create_time', 'memory_info'] + if os.name == 'posix': + attrs.append('uids') + attrs.append('terminal') + print(templ % ("USER", "PID", "%CPU", "%MEM", "VSZ", "RSS", "TTY", + "START", "TIME", "COMMAND")) + for p in psutil.process_iter(): + try: + pinfo = p.as_dict(attrs, ad_value='') + except psutil.NoSuchProcess: + pass + else: + if pinfo['create_time']: + ctime = datetime.datetime.fromtimestamp(pinfo['create_time']) + if ctime.date() == today_day: + ctime = ctime.strftime("%H:%M") + else: + ctime = ctime.strftime("%b%d") + else: + ctime = '' + cputime = time.strftime("%M:%S", + time.localtime(sum(pinfo['cpu_times']))) + try: + user = p.username() + except KeyError: + if os.name == 'posix': + if pinfo['uids']: + user = str(pinfo['uids'].real) + else: + user = '' + else: + raise + except psutil.Error: + user = '' + if os.name == 'nt' and '\\' in user: + user = user.split('\\')[1] + vms = pinfo['memory_info'] and \ + int(pinfo['memory_info'].vms / 1024) or '?' + rss = pinfo['memory_info'] and \ + int(pinfo['memory_info'].rss / 1024) or '?' + memp = pinfo['memory_percent'] and \ + round(pinfo['memory_percent'], 1) or '?' + print(templ % ( + user[:10], + pinfo['pid'], + pinfo['cpu_percent'], + memp, + vms, + rss, + pinfo.get('terminal', '') or '?', + ctime, + cputime, + pinfo['name'].strip() or '?')) + + +if __name__ == '__main__': + main() |