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