mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # A generic class to build line-oriented command interpreters
 | |
| 
 | |
| import string
 | |
| import sys
 | |
| import linecache
 | |
| 
 | |
| PROMPT = '(Cmd) '
 | |
| IDENTCHARS = string.letters + string.digits + '_'
 | |
| 
 | |
| class Cmd:
 | |
| 	
 | |
| 	def init(self):
 | |
| 		self.prompt = PROMPT
 | |
| 		self.identchars = IDENTCHARS
 | |
| 		self.lastcmd = ''
 | |
| 		return self
 | |
| 
 | |
| 	def cmdloop(self):
 | |
| 		stop = None
 | |
| 		while not stop:
 | |
| 			try:
 | |
| 				line = raw_input(self.prompt)
 | |
| 			except EOFError:
 | |
| 				line = 'EOF'
 | |
| 			stop = self.onecmd(line)
 | |
| 
 | |
| 	def onecmd(self, line):
 | |
| 		line = string.strip(line)
 | |
| 		if not line:
 | |
| 			line = self.lastcmd
 | |
| 		else:
 | |
| 			self.lastcmd = line
 | |
| 		i, n = 0, len(line)
 | |
| 		while i < n and line[i] in self.identchars: i = i+1
 | |
| 		cmd, arg = line[:i], string.strip(line[i:])
 | |
| 		if cmd == '':
 | |
| 			return self.default(line)
 | |
| 		else:
 | |
| 			try:
 | |
| 				func = eval('self.do_' + cmd)
 | |
| 			except AttributeError:
 | |
| 				return self.default(line)
 | |
| 			return func(arg)
 | |
| 
 | |
| 	def default(self, line):
 | |
| 		print '*** Unknown syntax:', line
 | |
| 
 | |
| 	def do_help(self, arg):
 | |
| 		if arg:
 | |
| 			# XXX check arg syntax
 | |
| 			try:
 | |
| 				func = eval('self.help_' + arg)
 | |
| 			except:
 | |
| 				print '*** No help on', `arg`
 | |
| 				return
 | |
| 			func()
 | |
| 		else:
 | |
| 			import getattr
 | |
| 			names = getattr.dir(self)
 | |
| 			cmds = []
 | |
| 			for name in names:
 | |
| 				if name[:3] == 'do_':
 | |
| 					cmds.append(name[3:])
 | |
| 			print cmds
 | 
