blob: ef8cb6c4101a43868107d0ee28600fc8229f98b0 [file] [log] [blame]
Just van Rossum8afa3a32003-01-04 21:44:21 +00001"""terminalcommand.py -- A minimal interface to Terminal.app.
2
3To run a shell command in a new Terminal.app window:
4
5 import terminalcommand
6 terminalcommand.run("ls -l")
7
8No result is returned; it is purely meant as a quick way to run a script
9with 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
Benjamin Peterson23681932008-05-12 21:42:13 +000017from warnings import warnpy3k
Benjamin Petersona6864e02008-07-14 17:42:17 +000018warnpy3k("In 3.x, the terminalcommand module is removed.", stacklevel=2)
Benjamin Peterson23681932008-05-12 21:42:13 +000019
Just van Rossum8afa3a32003-01-04 21:44:21 +000020import time
21import os
22from Carbon import AE
23from Carbon.AppleEvents import *
24
25
26TERMINAL_SIG = "trmx"
27START_TERMINAL = "/usr/bin/open /Applications/Utilities/Terminal.app"
28SEND_MODE = kAENoReply # kAEWaitReply hangs when run from Terminal.app itself
29
30
31def run(command):
32 """Run a shell command in a new Terminal.app window."""
Ronald Oussorenf2ef92c2008-05-02 21:42:35 +000033 termAddress = AE.AECreateDesc(typeApplicationBundleID, "com.apple.Terminal")
Just van Rossumac8657b2003-06-21 14:49:14 +000034 theEvent = AE.AECreateAppleEvent(kAECoreSuite, kAEDoScript, termAddress,
35 kAutoGenerateReturnID, kAnyTransactionID)
36 commandDesc = AE.AECreateDesc(typeChar, command)
37 theEvent.AEPutParamDesc(kAECommandClass, commandDesc)
Just van Rossum8afa3a32003-01-04 21:44:21 +000038
39 try:
Just van Rossumac8657b2003-06-21 14:49:14 +000040 theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
Just van Rossum8afa3a32003-01-04 21:44:21 +000041 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)
Just van Rossumac8657b2003-06-21 14:49:14 +000046 theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
Just van Rossum8afa3a32003-01-04 21:44:21 +000047
48
49if __name__ == "__main__":
50 run("ls -l")