diff options
-rw-r--r-- | Mac/Contrib/mpwsystem/mpwsystem.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Mac/Contrib/mpwsystem/mpwsystem.py b/Mac/Contrib/mpwsystem/mpwsystem.py new file mode 100644 index 0000000..34646c4 --- /dev/null +++ b/Mac/Contrib/mpwsystem/mpwsystem.py @@ -0,0 +1,67 @@ + +"""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 + + |