summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Mac/Contrib/mpwsystem/mpwsystem.py67
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
+
+