| """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() | 
 | 	 | 
 | 	 | 
 | 		 | 
 | 		 | 
 | 		 |