mirror of https://github.com/python/cpython
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
|
|
|
|
|