From 7ce495543a606ee50ee0cd1b071bde2099fdf8fe Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Mon, 4 Oct 2021 02:45:08 +0300 Subject: top: run with -E/-e if supported --- app.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index b4d2967..1ae9760 100755 --- a/app.py +++ b/app.py @@ -207,8 +207,10 @@ class Task(abc.ABC): class TopTask(Task): + COMMAND = None + def __init__(self): - self.cmd = Command('top', '-b', '-n', '1', '-w', '512') + self.cmd = TopTask.get_command() def run(self): self.task = self.cmd.run() @@ -216,6 +218,21 @@ class TopTask(Task): def result(self): return self.task.result() + @staticmethod + def get_command(): + # On more modern versions of top, we want to enable memory scaling + # from the command line (another option is the rc file, but that's too + # complicated). For that, we simply run `top -h` once, and check if + # the output contains the flags we want to use. + if TopTask.COMMAND is not None: + return TopTask.COMMAND + help_output = run_do('top', '-h') + args = ['top', '-b', '-n', '1', '-w', '512'] + if 'Ee' in help_output: + args += ['-E', 'm', '-e', 'm'] + TopTask.COMMAND = Command(*args) + return TopTask.COMMAND + class RebootTask(Task): def __init__(self): -- cgit v1.2.3