diff options
author | Lars Wirzenius <liw@liw.fi> | 2013-04-11 21:02:25 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2013-04-11 21:02:25 +0100 |
commit | 1bb1bd5e2d3ff0e1157ab3a8b38d7d013bbe533e (patch) | |
tree | ce288274de793306013bd3410d076d7640b6d25d /desktop-cronish | |
parent | 4deef2283ce371e0c5e4e3360617e1890dee9cac (diff) | |
download | desktop-cronish-1bb1bd5e2d3ff0e1157ab3a8b38d7d013bbe533e.tar.gz |
Add terminal progress output
Diffstat (limited to 'desktop-cronish')
-rwxr-xr-x | desktop-cronish | 37 |
1 files changed, 28 insertions, 9 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): |