mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Module to buffer stdout/stderr until stdin is read. Useful for
windowing programs, together with option to keep console window closed until needed.
This commit is contained in:
		
							parent
							
								
									0b34dd51b5
								
							
						
					
					
						commit
						1b3904b998
					
				
					 1 changed files with 110 additions and 0 deletions
				
			
		
							
								
								
									
										110
									
								
								Mac/Lib/quietconsole.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								Mac/Lib/quietconsole.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,110 @@ | |||
| """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() | ||||
| 	 | ||||
| 	 | ||||
| 		 | ||||
| 		 | ||||
| 		 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Jansen
						Jack Jansen