1 """terminalcommand.py -- A minimal interface to Terminal.app. 2 3 To run a shell command in a new Terminal.app window: 4 5 import terminalcommand 6 terminalcommand.run("ls -l") 7 8 No result is returned; it is purely meant as a quick way to run a script 9 with a decent input/output window. 10 """ 11 12 # 13 # This module is a fairly straightforward translation of Jack Jansen's 14 # Mac/OSX/PythonLauncher/doscript.m. 15 # 16 17 from warnings import warnpy3k 18 warnpy3k("In 3.x, the terminalcommand module is removed.", stacklevel=2) 19 20 import time 21 import os 22 from Carbon import AE 23 from Carbon.AppleEvents import * 24 25 26 TERMINAL_SIG = "trmx" 27 START_TERMINAL = "/usr/bin/open /Applications/Utilities/Terminal.app" 28 SEND_MODE = kAENoReply # kAEWaitReply hangs when run from Terminal.app itself 29 30 31 def run(command): 32 """Run a shell command in a new Terminal.app window.""" 33 termAddress = AE.AECreateDesc(typeApplicationBundleID, "com.apple.Terminal") 34 theEvent = AE.AECreateAppleEvent(kAECoreSuite, kAEDoScript, termAddress, 35 kAutoGenerateReturnID, kAnyTransactionID) 36 commandDesc = AE.AECreateDesc(typeChar, command) 37 theEvent.AEPutParamDesc(kAECommandClass, commandDesc) 38 39 try: 40 theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout) 41 except AE.Error, why: 42 if why[0] != -600: # Terminal.app not yet running 43 raise 44 os.system(START_TERMINAL) 45 time.sleep(1) 46 theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout) 47 48 49 if __name__ == "__main__": 50 run("ls -l") 51