mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			111 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								"""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()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										
							 |