| 
									
										
										
										
											2003-01-04 21:44:21 +00:00
										 |  |  | """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.""" | 
					
						
							| 
									
										
										
										
											2008-05-02 21:42:35 +00:00
										 |  |  |     termAddress = AE.AECreateDesc(typeApplicationBundleID, "com.apple.Terminal") | 
					
						
							| 
									
										
										
										
											2003-06-21 14:49:14 +00:00
										 |  |  |     theEvent = AE.AECreateAppleEvent(kAECoreSuite, kAEDoScript, termAddress, | 
					
						
							|  |  |  |                                      kAutoGenerateReturnID, kAnyTransactionID) | 
					
						
							|  |  |  |     commandDesc = AE.AECreateDesc(typeChar, command) | 
					
						
							|  |  |  |     theEvent.AEPutParamDesc(kAECommandClass, commandDesc) | 
					
						
							| 
									
										
										
										
											2003-01-04 21:44:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2003-06-21 14:49:14 +00:00
										 |  |  |         theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout) | 
					
						
							| 
									
										
										
										
											2003-01-04 21:44:21 +00:00
										 |  |  |     except AE.Error, why: | 
					
						
							|  |  |  |         if why[0] != -600:  # Terminal.app not yet running | 
					
						
							|  |  |  |             raise | 
					
						
							|  |  |  |         os.system(START_TERMINAL) | 
					
						
							|  |  |  |         time.sleep(1) | 
					
						
							| 
									
										
										
										
											2003-06-21 14:49:14 +00:00
										 |  |  |         theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout) | 
					
						
							| 
									
										
										
										
											2003-01-04 21:44:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     run("ls -l") |