diff Lib/idlelib/PyShell.py @ 26730:9b4c014b3a21 legacy-trunk

Update way a subprocess is launched for Mac OS X. Another applet mechanism has been developed for Python on Mac OS X and trying to use the -c "__import__('run').main()" trick is just not working. macosx_main.py is a new file which should be used as the startup file for Mac OS X applet bundles. This startup file understands a -p option, which when seen will start run.main(). When running as an applet, this seems like the best approach.
author Tony Lownds <tony@lownds.com>
date Fri, 20 Dec 2002 04:24:43 +0000
parents 975333d40bf8
children 72cf089d634a
line wrap: on
line diff
--- a/Lib/idlelib/PyShell.py	Fri Dec 20 01:54:21 2002 +0000
+++ b/Lib/idlelib/PyShell.py	Fri Dec 20 04:24:43 2002 +0000
@@ -298,24 +298,27 @@
     rpcpid = None
 
     def spawn_subprocess(self):         
-        w = ['-W' + s for s in sys.warnoptions]        
-        args = [self.find_executable()] + w \
-             + ["-c", "__import__('run').main()", str(self.port)]
+        args = self.build_subprocess_arglist()
         self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
 
-    def find_executable(self):
-        if sys.platform == 'darwin' and sys.executable.count('.app'):
-            # On Mac OS X, avoid calling sys.executable because it ignores
-            # command-line options (sys.executable is an applet)
+    def build_subprocess_arglist(self):
+        if sys.platform == 'darwin' and sys.argv[0].count('.app'):
+            # We need to avoid using sys.executable because it fails on some
+            # of the applet architectures On Mac OS X.
+            #
+            # here are the applet architectures tried:
             #
-            # Instead, find the executable by looking relative to
-            # sys.prefix.
-            executable = os.path.join(sys.prefix, 'Resources', 
-                                      'Python.app', 'Contents',
-                                      'MacOS', 'python')
-            return executable
+            # framework applet: sys.executable + -p is correct
+            # python 2.2 + pure python main applet: 
+            #                   sys.executable + -p is correct
+            # pythonw idle.py:  sys.executable + -c is correct
+            #
+            # XXX what about warnoptions?
+            return [sys.executable, '-p', str(self.port)]
         else:
-            return sys.executable 
+            w = ['-W' + s for s in sys.warnoptions]        
+            return [sys.executable] + w \
+                 + ["-c", "__import__('run').main()", str(self.port)]
 
     def start_subprocess(self):
         addr = ("localhost", self.port)
@@ -1174,6 +1177,7 @@
     fixwordbreaks(root)
     root.withdraw()
     flist = PyShellFileList(root)
+
     if enable_edit:
         if not (cmd or script):
             for filename in args: