Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: third_party/psutil/examples/iotop.py

Issue 8774018: Add psutil build step to fix pyauto media issues. Upgrade psutil to 0.4.0. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Replace 'python' w/ sys.executable. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/psutil/examples/iotop.py
diff --git a/third_party/psutil/examples/iotop.py b/third_party/psutil/examples/iotop.py
index 2307c75aa7ed2d20cab343b1d7dc4804da4b9fb4..222a135b331ba3f88c9e90d43a0463305d03b86c 100644
--- a/third_party/psutil/examples/iotop.py
+++ b/third_party/psutil/examples/iotop.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# $Id: iotop.py 1143 2011-10-05 19:11:59Z g.rodola $
+# $Id: iotop.py 1213 2011-10-29 03:30:41Z g.rodola $
#
# Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -10,18 +10,52 @@
A clone of iotop (http://guichaz.free.fr/iotop/) showing real time
disk I/O statistics.
-It works on UNIX only as curses module is not available on Windows.
+It works on Linux only (FreeBSD and OSX are missing support for IO
+counters).
+It doesn't work on Windows as curses module is required.
Author: Giampaolo Rodola' <g.rodola@gmail.com>
"""
+import os
+import sys
+import psutil
+if not hasattr(psutil.Process, 'get_io_counters') or os.name != 'posix':
+ sys.exit('platform not supported')
import time
import curses
import atexit
-import psutil
+
+# --- curses stuff
+def tear_down():
+ win.keypad(0)
+ curses.nocbreak()
+ curses.echo()
+ curses.endwin()
win = curses.initscr()
+atexit.register(tear_down)
+curses.endwin()
+lineno = 0
+
+def print_line(line, highlight=False):
+ """A thin wrapper around curses's addstr()."""
+ global lineno
+ try:
+ if highlight:
+ line += " " * (win.getmaxyx()[1] - len(line))
+ win.addstr(lineno, 0, line, curses.A_REVERSE)
+ else:
+ win.addstr(lineno, 0, line, 0)
+ except curses.error:
+ lineno = 0
+ win.refresh()
+ raise
+ else:
+ lineno += 1
+# --- /curses stuff
+
def bytes2human(n):
"""
@@ -87,50 +121,41 @@ def poll(interval):
return (processes, disks_read_per_sec, disks_write_per_sec)
-def run(win):
+
+def refresh_window(procs, disks_read, disks_write):
"""Print results on screen by using curses."""
curses.endwin()
templ = "%-5s %-7s %11s %11s %s"
- interval = 0
- while 1:
- procs, disks_read, disks_write = poll(interval)
- win.erase()
-
- disks_tot = "Total DISK READ: %s | Total DISK WRITE: %s" \
- % (bytes2human(disks_read), bytes2human(disks_write))
- win.addstr(0, 0, disks_tot)
-
- header = templ % ("PID", "USER", "DISK READ", "DISK WRITE", "COMMAND")
- header += " " * (win.getmaxyx()[1] - len(header))
- win.addstr(1, 0, header, curses.A_REVERSE)
-
- lineno = 2
- for p in procs:
- line = templ % (p.pid,
- p._username[:7],
- bytes2human(p._read_per_sec),
- bytes2human(p._write_per_sec),
- p._cmdline)
- try:
- win.addstr(lineno, 0, line)
- except curses.error:
- break
- win.refresh()
- lineno += 1
- interval = 1
+ win.erase()
-def main():
- def tear_down():
- win.keypad(0)
- curses.nocbreak()
- curses.echo()
- curses.endwin()
+ disks_tot = "Total DISK READ: %s | Total DISK WRITE: %s" \
+ % (bytes2human(disks_read), bytes2human(disks_write))
+ print_line(disks_tot)
- atexit.register(tear_down)
+ header = templ % ("PID", "USER", "DISK READ", "DISK WRITE", "COMMAND")
+ print_line(header, highlight=True)
+
+ for p in procs:
+ line = templ % (p.pid,
+ p._username[:7],
+ bytes2human(p._read_per_sec),
+ bytes2human(p._write_per_sec),
+ p._cmdline)
+ try:
+ print_line(line)
+ except curses.error:
+ break
+ win.refresh()
+
+def main():
try:
- run(win)
+ interval = 0
+ while 1:
+ args = poll(interval)
+ refresh_window(*args)
+ interval = 1
except (KeyboardInterrupt, SystemExit):
- pass
+ print
if __name__ == '__main__':
main()

Powered by Google App Engine
This is Rietveld 408576698