summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2001-12-03 00:11:35 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2001-12-03 00:11:35 (GMT)
commit20ffa0e5bc274ac873a4ff318deb1faaefee0703 (patch)
tree715c924e63e48f016c15cca9e6b96ae2cf1e76d7
parent1d5b3f29ffc4a17f88f26c670c1e74290795e6f7 (diff)
downloadcpython-20ffa0e5bc274ac873a4ff318deb1faaefee0703.zip
cpython-20ffa0e5bc274ac873a4ff318deb1faaefee0703.tar.gz
cpython-20ffa0e5bc274ac873a4ff318deb1faaefee0703.tar.bz2
A system() lookalike that sends commands to ToolServer, by Daniel Brotsky. The semantics aren't enough like system() to add this to the main Lib folder, but it is pretty useful nonetheless for selected people.
-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
+
+