From 1bb1bd5e2d3ff0e1157ab3a8b38d7d013bbe533e Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 11 Apr 2013 21:02:25 +0100 Subject: Add terminal progress output --- desktop-cronish | 37 ++++++++++++++++++++++++++++--------- tests/date.script | 2 +- tests/timeout.script | 2 +- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/desktop-cronish b/desktop-cronish index 713f135..31dc563 100755 --- a/desktop-cronish +++ b/desktop-cronish @@ -19,6 +19,7 @@ import cliapp import logging import time import sys +import ttystatus import yaml @@ -34,14 +35,28 @@ class DesktopCronish(cliapp.Application): metavar='N', default=0) + self.settings.boolean( + ['quiet', 'q'], + 'no status messaging to terminal') + def process_args(self, args): + self.ts = ttystatus.TerminalStatus(period=0.1) + self.ts.format('%String(timestamp) %String(msg)') self.jobs = {} self.previously = {} self.process_inputs(args) self.execute_jobs() + self.ts.finish() + + def status(self, msg): + logging.info(msg) + if not self.settings['quiet']: + self.ts['timestamp'] = time.strftime('%H:%M:%S') + self.ts['msg'] = msg + self.ts.flush() def process_input(self, filename): - logging.info('Loading jobs from %s' % filename) + self.status('Loading jobs from %s' % filename) with self.open_input(filename, 'r') as f: job_dict = yaml.safe_load(f) self.jobs.update(job_dict) @@ -54,7 +69,7 @@ class DesktopCronish(cliapp.Application): self.wait_until(when) self.execute_job(job_name) n += 1 - logging.info('Stopped executing after %d jobs' % n) + self.status('Stopped executing after %d jobs' % n) def choose_job(self): next_job_name = None @@ -69,22 +84,26 @@ class DesktopCronish(cliapp.Application): def wait_until(self, when): while self.now() < when: seconds = when - self.now() - logging.info('Sleeping for %d seconds' % seconds) + self.status('Sleeping for %.1f seconds' % seconds) time.sleep(seconds) def execute_job(self, job_name): job = self.jobs[job_name] - logging.info('Executing job %s: %s' % (job_name, job['command'])) + self.status('Executing job %s: %s' % (job_name, job['command'])) argv = ['sh', '-c', job['command']] if 'timeout' in job: argv = ['timeout', str(job['timeout'])] + argv exit, out, err = cliapp.runcmd_unchecked(argv) - self.output.write(out) + if out.endswith('\n'): + out = out[:-1] + if out: + self.ts.notify(out) if exit != 0: - sys.stderr.write( - 'ERROR: Job %s: Command failed: %s\n' % - (job_name, ' '.join(argv))) - sys.stderr.write(err) + self.ts.error( + 'ERROR: Job %s: Command failed: %s' % + (job_name, job['command'])) + if err: + self.ts.error(err) self.previously[job_name] = self.now() def now(self): diff --git a/tests/date.script b/tests/date.script index 2f66f1f..e4cca84 100755 --- a/tests/date.script +++ b/tests/date.script @@ -10,7 +10,7 @@ date: EOF -./desktop-cronish --max-jobs=5 "$DATADIR/foo.tasks" +./desktop-cronish --quiet --max-jobs=5 "$DATADIR/foo.tasks" wc -l < "$DATADIR/foo.output" awk 'NR > 1 { print $1 - prev } { prev = $1 }' "$DATADIR/foo.output" | diff --git a/tests/timeout.script b/tests/timeout.script index 0533880..e135c7e 100755 --- a/tests/timeout.script +++ b/tests/timeout.script @@ -10,4 +10,4 @@ date: EOF -./desktop-cronish --max-jobs=1 "$DATADIR/foo.tasks" +./desktop-cronish --quiet --max-jobs=1 "$DATADIR/foo.tasks" -- cgit v1.2.1