"""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 . (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