18afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum"""terminalcommand.py -- A minimal interface to Terminal.app.
28afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
38afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van RossumTo run a shell command in a new Terminal.app window:
48afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
58afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum    import terminalcommand
68afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum    terminalcommand.run("ls -l")
78afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
88afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van RossumNo result is returned; it is purely meant as a quick way to run a script
98afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumwith a decent input/output window.
108afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum"""
118afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
128afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum#
138afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum# This module is a fairly straightforward translation of Jack Jansen's
148afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum# Mac/OSX/PythonLauncher/doscript.m.
158afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum#
168afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
17236819310db3fe6f2fb22d48b780fa6ec253b6c7Benjamin Petersonfrom warnings import warnpy3k
18a6864e0d9f1fc06c50db36ed913ac48a3d2ddde5Benjamin Petersonwarnpy3k("In 3.x, the terminalcommand module is removed.", stacklevel=2)
19236819310db3fe6f2fb22d48b780fa6ec253b6c7Benjamin Peterson
208afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumimport time
218afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumimport os
228afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumfrom Carbon import AE
238afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumfrom Carbon.AppleEvents import *
248afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
258afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
268afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van RossumTERMINAL_SIG = "trmx"
278afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van RossumSTART_TERMINAL = "/usr/bin/open /Applications/Utilities/Terminal.app"
288afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van RossumSEND_MODE = kAENoReply  # kAEWaitReply hangs when run from Terminal.app itself
298afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
308afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
318afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumdef run(command):
328afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum    """Run a shell command in a new Terminal.app window."""
33f2ef92cee70de65f6f963fc4ffd3ac5729a19d90Ronald Oussoren    termAddress = AE.AECreateDesc(typeApplicationBundleID, "com.apple.Terminal")
34ac8657bb0e2c461a641af323b6df243511800715Just van Rossum    theEvent = AE.AECreateAppleEvent(kAECoreSuite, kAEDoScript, termAddress,
35ac8657bb0e2c461a641af323b6df243511800715Just van Rossum                                     kAutoGenerateReturnID, kAnyTransactionID)
36ac8657bb0e2c461a641af323b6df243511800715Just van Rossum    commandDesc = AE.AECreateDesc(typeChar, command)
37ac8657bb0e2c461a641af323b6df243511800715Just van Rossum    theEvent.AEPutParamDesc(kAECommandClass, commandDesc)
388afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
398afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum    try:
40ac8657bb0e2c461a641af323b6df243511800715Just van Rossum        theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
418afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum    except AE.Error, why:
428afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum        if why[0] != -600:  # Terminal.app not yet running
438afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum            raise
448afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum        os.system(START_TERMINAL)
458afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum        time.sleep(1)
46ac8657bb0e2c461a641af323b6df243511800715Just van Rossum        theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
478afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
488afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum
498afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossumif __name__ == "__main__":
508afa3a3092b5f8ca37d9dca0823edd3d3253ffc9Just van Rossum    run("ls -l")
51