mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +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 | ||
|  | 	 | ||
|  | 	 |