| #!/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 examples/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() |