diff options
author | Nico Schlömer <nico.schloemer@gmail.com> | 2021-11-14 18:51:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-14 18:51:47 +0100 |
commit | 030e5032ff1889b86abe980028bde3a15f20e226 (patch) | |
tree | 7839b1eeaf5f8288e1ff042f8a6cc67762923d96 | |
parent | 42f2744cef94b10c3bc86af907e1e6351b82448f (diff) | |
parent | de5d38a73bddcc2e2828ae7130b1b89f583895db (diff) |
Merge pull request #17 from nschloe/procs-fixv0.0.6
procs fix
-rw-r--r-- | setup.cfg | 2 | ||||
-rw-r--r-- | src/tiptop/_procs_list.py | 41 |
2 files changed, 33 insertions, 10 deletions
@@ -1,6 +1,6 @@ [metadata] name = tiptop -version = 0.0.5 +version = 0.0.6 author = Nico Schlömer author_email = nico.schloemer@gmail.com description = A better top diff --git a/src/tiptop/_procs_list.py b/src/tiptop/_procs_list.py index bd6534e..14f583c 100644 --- a/src/tiptop/_procs_list.py +++ b/src/tiptop/_procs_list.py @@ -40,7 +40,11 @@ class ProcsList(Widget): ] processes = sorted( psutil.process_iter(attrs), - key=lambda item: item.info["cpu_percent"], + # The item.info["cpu_percent"] can be `ad_value` (default None). + # It gets assigned to a dict key in case AccessDenied or + # ZombieProcess exception is raised when retrieving that particular + # process information. + key=lambda item: (item.info["cpu_percent"] or 0.0), reverse=True, ) @@ -60,17 +64,36 @@ class ProcsList(Widget): table.add_column("[u]cpu%[/]", width=5, no_wrap=True) for p in processes[: self.max_num_procs]: + # Everything can be None here, see comment above + pid = p.info["pid"] + pid = "" if pid is None else f"{pid:6d}" + # + name = p.info["name"] + if name is None: + name = "" + # + cmdline = p.info["cmdline"] + cmdline = "" if cmdline is None else " ".join(p.info["cmdline"][1:]) + # + num_threads = p.info["num_threads"] + num_threads = "" if num_threads is None else f"{num_threads:3d}" + # + username = p.info["username"] + if username is None: + username = "" + # + mem_info = p.info["memory_info"] + mem_info = ( + "" if mem_info is None else sizeof_fmt(mem_info.rss, suffix="", sep="") + ) + # + cpu_percent = p.info["cpu_percent"] + cpu_percent = "" if cpu_percent is None else f"{cpu_percent:5.1f}" table.add_row( - f"{p.info['pid']:6d}", - p.info["name"], - " ".join(p.info["cmdline"][1:]), - f"{p.info['num_threads']:3d}", - p.info["username"], - sizeof_fmt(p.info["memory_info"].rss, suffix="", sep=""), - f"{p.info['cpu_percent']:5.1f}", + pid, name, cmdline, num_threads, username, mem_info, cpu_percent ) - total_num_threads = sum(p.info["num_threads"] for p in processes) + total_num_threads = sum((p.info["num_threads"] or 0) for p in processes) num_sleep = sum(p.info["status"] == "sleeping" for p in processes) self.panel = Panel( |