home *** CD-ROM | disk | FTP | other *** search
- """quietconsole - A module to keep console I/O quiet but dump it when needed"""
- import types
- import sys
-
- class _PseudoStdin:
- def __init__(self, stdouterr):
- self.keep_stdin = sys.stdin
- sys.stdin = self
- self.keep_stdouterr = stdouterr
-
- def __del__(self):
- self.keep_stdin = self.keep_stdouterr = None
-
- def _revert(self):
- """Return to old state, with true stdio"""
- if self.keep_stdin == None:
- return
- sys.stdin = self.keep_stdin
- self.keep_stdin = None
- self.keep_stdouterr._revert(1)
- self.keep_stdouterr = None
-
- def read(self, *args):
- self._revert()
- return apply(sys.stdin.read, args)
-
- def readlines(self, *args):
- self._revert()
- return apply(sys.stdin.readlines, args)
-
- def readline(self, *args):
- self._revert()
- return apply(sys.stdin.readline, args)
-
- def close(self):
- self._revert()
- sys.stdin.close()
-
- class _PseudoStdouterr:
- def __init__(self):
- self.keep_stdout = sys.stdout
- self.keep_stderr = sys.stderr
- sys.stdout = sys.stderr = self
- self.data = []
-
- def __del__(self):
- self.keep_stdout = self.keep_stderr = None
-
- def _revert(self, dumpdata=0):
- if self.keep_stdout == None:
- return
- sys.stdout = self.keep_stdout
- sys.stderr = self.keep_stderr
- sys.keep_stdout = self.keep_stderr = None
- if dumpdata and self.data:
- for d in self.data:
- sys.stdout.write(d)
- self.data = None
-
- def write(self, arg):
- self.data.append(arg)
-
- def writelines(self, arg):
- for d in arg:
- self.data.append(arg)
-
- def close(self):
- self.keep_stdout = self.keep_stderr = self.data = None
-
- beenhere = 0
-
- def install():
- global beenhere
- if beenhere:
- return
- beenhere = 1
- # There's no point in re-installing if the console has been active
- obj = _PseudoStdouterr()
- _PseudoStdin(obj)
- # No need to keep the objects, they're saved in sys.std{in,out,err}
-
- def revert():
- if type(sys.stdin) == types.FileType:
- return # Not installed
- sys.stdin._revert()
-
- def _test():
- import time
- install()
- print "You will not see this yet"
- time.sleep(1)
- print "You will not see this yet"
- time.sleep(1)
- print "You will not see this yet"
- time.sleep(1)
- print "You will not see this yet"
- time.sleep(1)
- print "You will not see this yet"
- time.sleep(1)
- print "5 seconds have passed, now you may type something"
- rv = sys.stdin.readline()
- print "You typed", rv
-
- if __name__ == '__main__':
- _test()
-
-
-
-
-
-