symbian-qemu-0.9.1-12/python-2.6.1/Lib/plat-mac/terminalcommand.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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")