blob: 835a644dbd72290db8b648143adf6f15d88a1181 [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
17import time
18import os
19from Carbon import AE
20from Carbon.AppleEvents import *
21
22
23TERMINAL_SIG = "trmx"
24START_TERMINAL = "/usr/bin/open /Applications/Utilities/Terminal.app"
25SEND_MODE = kAENoReply # kAEWaitReply hangs when run from Terminal.app itself
26
27
28def run(command):
29 """Run a shell command in a new Terminal.app window."""
30 termAddress = AE.AECreateDesc(typeApplSignature, TERMINAL_SIG)
31 theEvent = AE.AECreateAppleEvent(kAEMiscStandards, kAEActivate,
32 termAddress, kAutoGenerateReturnID,
33 kAnyTransactionID)
34
35 try:
36 theEvent.AESend(SEND_MODE, kAENormalPriority,
37 kAEDefaultTimeout)
38 except AE.Error, why:
39 if why[0] != -600: # Terminal.app not yet running
40 raise
41 os.system(START_TERMINAL)
42 time.sleep(1)
43 theEvent.AESend(SEND_MODE, kAENormalPriority,
44 kAEDefaultTimeout)
45
46 theEvent = AE.AECreateAppleEvent(kAECoreSuite, kAEDoScript, termAddress,
47 kAutoGenerateReturnID, kAnyTransactionID)
48 commandDesc = AE.AECreateDesc(typeChar, command)
49 theEvent.AEPutParamDesc(kAECommandClass, commandDesc)
50 theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
51
52
53if __name__ == "__main__":
54 run("ls -l")