summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-03-23 20:55:57 +0000
committerLars Wirzenius <liw@liw.fi>2011-03-23 20:55:57 +0000
commit0a042c9a4925e04b06295f292d44cb57dfb90d79 (patch)
tree88e1ef5d5bd1d8b969f1b3cfd6c8c82a976129ea
parent8aa89cf1bb2148638ae1d862f801a3a2a2a2f522 (diff)
downloadpython-ttystatus-0a042c9a4925e04b06295f292d44cb57dfb90d79.tar.gz
Handle /dev/tty not being possible to open.
E.g., under cron.
-rw-r--r--ttystatus/messager.py12
-rw-r--r--ttystatus/messager_tests.py6
2 files changed, 16 insertions, 2 deletions
diff --git a/ttystatus/messager.py b/ttystatus/messager.py
index 7b3464c..823f25e 100644
--- a/ttystatus/messager.py
+++ b/ttystatus/messager.py
@@ -26,9 +26,15 @@ class Messager(object):
'''Write messages to the terminal.'''
- def __init__(self, output=None, period=None):
+ def __init__(self, output=None, period=None, open_tty=None):
self._enabled = True
- self.output = output or self._open_tty()
+ if output:
+ self.output = output
+ else:
+ try:
+ self.output = (open_tty or self._open_tty)()
+ except IOError:
+ self.output = None
self._period = 1.0 if period is None else period
self._last_msg = '' # What did we write last?
self._last_time = 0 # When did we write last?
@@ -57,6 +63,8 @@ class Messager(object):
'''
default_width = 80
+ if self.output is None:
+ return default_width
try:
s = struct.pack('HHHH', 0, 0, 0, 0)
x = fcntl.ioctl(self.output.fileno(), termios.TIOCGWINSZ, s)
diff --git a/ttystatus/messager_tests.py b/ttystatus/messager_tests.py
index 507082e..6f9bc8a 100644
--- a/ttystatus/messager_tests.py
+++ b/ttystatus/messager_tests.py
@@ -38,6 +38,12 @@ class MessagerTests(unittest.TestCase):
def test_sets_output(self):
self.assertEqual(self.messager.output, self.output)
+ def test_handles_no_tty(self):
+ def notty():
+ raise IOError()
+ m = ttystatus.Messager(open_tty=notty)
+ self.assertEqual(m.output, None)
+
def test_raw_writes_nothing_if_output_is_not_a_terminal(self):
self.messager.output = StringIO.StringIO()
self.messager._raw_write('foo')