mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			68 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"""mpwsystem -
							 | 
						||
| 
								 | 
							
								A simple example of how to use Apple Events to implement a "system()"
							 | 
						||
| 
								 | 
							
								call that invokes ToolServer on the command.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Contributed by Daniel Brotsky <dev@brotsky.com>.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(renamed from aesystem to mpwsystem by Jack)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								system(cmd, infile = None, outfile = None, errfile = None)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1. Every call to system sets "lastStatus" and "lastOutput" to the 
							 | 
						||
| 
								 | 
							
								status and output
							 | 
						||
| 
								 | 
							
								produced by the command when executed in ToolServer.  (lastParameters 
							 | 
						||
| 
								 | 
							
								and lastAttributes
							 | 
						||
| 
								 | 
							
								are set to the values of the AppleEvent result.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								2. system returns lastStatus unless the command result indicates a MacOS error,
							 | 
						||
| 
								 | 
							
								in which case os.Error is raised with the errnum as associated value.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								3. You can specify ToolServer-understandable pathnames for 
							 | 
						||
| 
								 | 
							
								redirection of input,
							 | 
						||
| 
								 | 
							
								output, and error streams.  By default, input is Dev:Null, output is captured
							 | 
						||
| 
								 | 
							
								and returned to the caller, diagnostics are captured and returned to 
							 | 
						||
| 
								 | 
							
								the caller.
							 | 
						||
| 
								 | 
							
								(There's a 64K limit to how much can be captured and returned this way.)"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import os
							 | 
						||
| 
								 | 
							
								import aetools
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								try: server
							 | 
						||
| 
								 | 
							
								except NameError: server = aetools.TalkTo("MPSX", 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								lastStatus = None
							 | 
						||
| 
								 | 
							
								lastOutput = None
							 | 
						||
| 
								 | 
							
								lastErrorOutput = None
							 | 
						||
| 
								 | 
							
								lastScript = None
							 | 
						||
| 
								 | 
							
								lastEvent = None
							 | 
						||
| 
								 | 
							
								lastReply = None
							 | 
						||
| 
								 | 
							
								lastParameters = None
							 | 
						||
| 
								 | 
							
								lastAttributes = None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def system(cmd, infile = None, outfile = None, errfile = None):
							 | 
						||
| 
								 | 
							
									global lastStatus, lastOutput, lastErrorOutput
							 | 
						||
| 
								 | 
							
									global lastScript, lastEvent, lastReply, lastParameters, lastAttributes
							 | 
						||
| 
								 | 
							
									cmdline = cmd
							 | 
						||
| 
								 | 
							
									if infile: cmdline += " <" + infile
							 | 
						||
| 
								 | 
							
									if outfile: cmdline += " >" + outfile
							 | 
						||
| 
								 | 
							
									if errfile: cmdline += " " + str(chr(179)) + errfile
							 | 
						||
| 
								 | 
							
									lastScript = "set Exit 0\r" + cmdline + "\rexit {Status}"
							 | 
						||
| 
								 | 
							
									lastEvent = server.newevent("misc", "dosc", {"----" : lastScript})
							 | 
						||
| 
								 | 
							
									(lastReply, lastParameters, lastAttributes) = server.sendevent(lastEvent)
							 | 
						||
| 
								 | 
							
									if lastParameters.has_key('stat'): lastStatus = lastParameters['stat']
							 | 
						||
| 
								 | 
							
									else: lastStatus = None
							 | 
						||
| 
								 | 
							
									if lastParameters.has_key('----'): lastOutput = lastParameters['----']
							 | 
						||
| 
								 | 
							
									else: lastOutput = None
							 | 
						||
| 
								 | 
							
									if lastParameters.has_key('diag'): lastErrorOutput = lastParameters['diag']
							 | 
						||
| 
								 | 
							
									else: lastErrorOutput = None
							 | 
						||
| 
								 | 
							
									if lastParameters['errn'] != 0:
							 | 
						||
| 
								 | 
							
										raise os.Error, lastParameters['errn']
							 | 
						||
| 
								 | 
							
									return lastStatus
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
									sts = system('alert "Hello World"')
							 | 
						||
| 
								 | 
							
									print 'system returned', sts
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									
							 |