mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""terminalcommand.py -- A minimal interface to Terminal.app.
 | 
						|
 | 
						|
To run a shell command in a new Terminal.app window:
 | 
						|
 | 
						|
    import terminalcommand
 | 
						|
    terminalcommand.run("ls -l")
 | 
						|
 | 
						|
No result is returned; it is purely meant as a quick way to run a script
 | 
						|
with a decent input/output window.
 | 
						|
"""
 | 
						|
 | 
						|
#
 | 
						|
# This module is a fairly straightforward translation of Jack Jansen's
 | 
						|
# Mac/OSX/PythonLauncher/doscript.m.
 | 
						|
#
 | 
						|
 | 
						|
import time
 | 
						|
import os
 | 
						|
from Carbon import AE
 | 
						|
from Carbon.AppleEvents import *
 | 
						|
 | 
						|
 | 
						|
TERMINAL_SIG = "trmx"
 | 
						|
START_TERMINAL = "/usr/bin/open /Applications/Utilities/Terminal.app"
 | 
						|
SEND_MODE = kAENoReply  # kAEWaitReply hangs when run from Terminal.app itself
 | 
						|
 | 
						|
 | 
						|
def run(command):
 | 
						|
    """Run a shell command in a new Terminal.app window."""
 | 
						|
    termAddress = AE.AECreateDesc(typeApplSignature, TERMINAL_SIG)
 | 
						|
    theEvent = AE.AECreateAppleEvent(kAEMiscStandards, kAEActivate,
 | 
						|
                                     termAddress, kAutoGenerateReturnID,
 | 
						|
                                     kAnyTransactionID)
 | 
						|
 | 
						|
    try:
 | 
						|
        theEvent.AESend(SEND_MODE, kAENormalPriority,
 | 
						|
                        kAEDefaultTimeout)
 | 
						|
    except AE.Error, why:
 | 
						|
        if why[0] != -600:  # Terminal.app not yet running
 | 
						|
            raise
 | 
						|
        os.system(START_TERMINAL)
 | 
						|
        time.sleep(1)
 | 
						|
        theEvent.AESend(SEND_MODE, kAENormalPriority,
 | 
						|
                        kAEDefaultTimeout)
 | 
						|
 | 
						|
    theEvent = AE.AECreateAppleEvent(kAECoreSuite, kAEDoScript, termAddress,
 | 
						|
                                     kAutoGenerateReturnID, kAnyTransactionID)
 | 
						|
    commandDesc = AE.AECreateDesc(typeChar, command)
 | 
						|
    theEvent.AEPutParamDesc(kAECommandClass, commandDesc)
 | 
						|
    theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    run("ls -l")
 |