mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
	
	
		
			55 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			55 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") |