summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2013-04-11 21:02:25 +0100
committerLars Wirzenius <liw@liw.fi>2013-04-11 21:02:25 +0100
commit1bb1bd5e2d3ff0e1157ab3a8b38d7d013bbe533e (patch)
treece288274de793306013bd3410d076d7640b6d25d
parent4deef2283ce371e0c5e4e3360617e1890dee9cac (diff)
downloaddesktop-cronish-1bb1bd5e2d3ff0e1157ab3a8b38d7d013bbe533e.tar.gz
Add terminal progress output
-rwxr-xr-xdesktop-cronish37
-rwxr-xr-xtests/date.script2
-rwxr-xr-xtests/timeout.script2
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"