diff options
author | Lars Wirzenius <liw@liw.fi> | 2011-03-23 20:55:57 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2011-03-23 20:55:57 +0000 |
commit | 0a042c9a4925e04b06295f292d44cb57dfb90d79 (patch) | |
tree | 88e1ef5d5bd1d8b969f1b3cfd6c8c82a976129ea | |
parent | 8aa89cf1bb2148638ae1d862f801a3a2a2a2f522 (diff) | |
download | python-ttystatus-0a042c9a4925e04b06295f292d44cb57dfb90d79.tar.gz |
Handle /dev/tty not being possible to open.
E.g., under cron.
-rw-r--r-- | ttystatus/messager.py | 12 | ||||
-rw-r--r-- | ttystatus/messager_tests.py | 6 |
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') |