mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
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.
This commit is contained in:
parent
24475896dd
commit
f53dec2e4e
5 changed files with 107 additions and 16 deletions
|
@ -298,24 +298,27 @@ class ModifiedInterpreter(InteractiveInterpreter):
|
||||||
rpcpid = None
|
rpcpid = None
|
||||||
|
|
||||||
def spawn_subprocess(self):
|
def spawn_subprocess(self):
|
||||||
w = ['-W' + s for s in sys.warnoptions]
|
args = self.build_subprocess_arglist()
|
||||||
args = [self.find_executable()] + w \
|
|
||||||
+ ["-c", "__import__('run').main()", str(self.port)]
|
|
||||||
self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
|
self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
|
||||||
|
|
||||||
def find_executable(self):
|
def build_subprocess_arglist(self):
|
||||||
if sys.platform == 'darwin' and sys.executable.count('.app'):
|
if sys.platform == 'darwin' and sys.argv[0].count('.app'):
|
||||||
# On Mac OS X, avoid calling sys.executable because it ignores
|
# We need to avoid using sys.executable because it fails on some
|
||||||
# command-line options (sys.executable is an applet)
|
# of the applet architectures On Mac OS X.
|
||||||
#
|
#
|
||||||
# Instead, find the executable by looking relative to
|
# here are the applet architectures tried:
|
||||||
# sys.prefix.
|
#
|
||||||
executable = os.path.join(sys.prefix, 'Resources',
|
# framework applet: sys.executable + -p is correct
|
||||||
'Python.app', 'Contents',
|
# python 2.2 + pure python main applet:
|
||||||
'MacOS', 'python')
|
# sys.executable + -p is correct
|
||||||
return executable
|
# pythonw idle.py: sys.executable + -c is correct
|
||||||
|
#
|
||||||
|
# XXX what about warnoptions?
|
||||||
|
return [sys.executable, '-p', str(self.port)]
|
||||||
else:
|
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):
|
def start_subprocess(self):
|
||||||
addr = ("localhost", self.port)
|
addr = ("localhost", self.port)
|
||||||
|
@ -1174,6 +1177,7 @@ def main():
|
||||||
fixwordbreaks(root)
|
fixwordbreaks(root)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
flist = PyShellFileList(root)
|
flist = PyShellFileList(root)
|
||||||
|
|
||||||
if enable_edit:
|
if enable_edit:
|
||||||
if not (cmd or script):
|
if not (cmd or script):
|
||||||
for filename in args:
|
for filename in args:
|
||||||
|
|
10
Lib/idlelib/boolcheck.py
Normal file
10
Lib/idlelib/boolcheck.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
"boolcheck - import this module to ensure True, False, bool() builtins exist."
|
||||||
|
try:
|
||||||
|
True
|
||||||
|
except NameError:
|
||||||
|
import __builtin__
|
||||||
|
__builtin__.True = 1
|
||||||
|
__builtin__.False = 0
|
||||||
|
from operator import truth
|
||||||
|
__builtin__.bool = truth
|
||||||
|
|
|
@ -1,4 +1,33 @@
|
||||||
#! /usr/bin/env python
|
#! /usr/bin/env python
|
||||||
|
|
||||||
import PyShell
|
# Add IDLE.app/Contents/Resources/idlelib to path.
|
||||||
PyShell.main()
|
# __file__ refers to this file when it is used as a module, sys.argv[0]
|
||||||
|
# refers to this file when it is used as a script (pythonw macosx_main.py)
|
||||||
|
import sys
|
||||||
|
from os.path import split, join
|
||||||
|
try:
|
||||||
|
__file__
|
||||||
|
except NameError:
|
||||||
|
__file__ = sys.argv[0]
|
||||||
|
idlelib = join(split(__file__)[0], 'idlelib')
|
||||||
|
if os.path.isdir(idlelib):
|
||||||
|
sys.path.append(idlelib)
|
||||||
|
|
||||||
|
# Make sure True, False, bool() builtins exist.
|
||||||
|
# - preserves 2.2 compatibility - 2.2.1 includes bool, 2.2 does not.
|
||||||
|
# - important for Mac OS X because it ships python 2.2
|
||||||
|
import boolcheck
|
||||||
|
|
||||||
|
# see if we are being asked to execute the subprocess code
|
||||||
|
if '-p' in sys.argv:
|
||||||
|
# run expects only the port number in sys.argv
|
||||||
|
sys.argv.remove('-p')
|
||||||
|
|
||||||
|
# this module will become the namepsace used by the interactive
|
||||||
|
# interpreter; remove all variables we have defined.
|
||||||
|
del sys, __file__, boolcheck, split, join
|
||||||
|
__import__('run').main()
|
||||||
|
else:
|
||||||
|
# start the application.
|
||||||
|
import PyShell
|
||||||
|
PyShell.main()
|
||||||
|
|
46
Lib/idlelib/macosx_main.py
Normal file
46
Lib/idlelib/macosx_main.py
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
"""IDLE.app
|
||||||
|
|
||||||
|
Installation:
|
||||||
|
see the install_IDLE target in python/dist/src/Mac/OSX/Makefile
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
1. Double clicking IDLE icon will open IDLE.
|
||||||
|
2. Dropping file on IDLE icon will open that file in IDLE.
|
||||||
|
3. Launch from command line with files with this command-line:
|
||||||
|
|
||||||
|
/Applications/Python/IDLE.app/Contents/MacOS/python file1 file2 file3
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Add IDLE.app/Contents/Resources/idlelib to path.
|
||||||
|
# __file__ refers to this file when it is used as a module, sys.argv[0]
|
||||||
|
# refers to this file when it is used as a script (pythonw macosx_main.py)
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from os.path import split, join, isdir
|
||||||
|
try:
|
||||||
|
__file__
|
||||||
|
except NameError:
|
||||||
|
__file__ = sys.argv[0]
|
||||||
|
idlelib = join(split(__file__)[0], 'idlelib')
|
||||||
|
if isdir(idlelib):
|
||||||
|
sys.path.append(idlelib)
|
||||||
|
|
||||||
|
# Make sure True, False, bool() builtins exist.
|
||||||
|
# - preserves 2.2 compatibility - 2.2.1 includes bool, 2.2 does not.
|
||||||
|
# - important for Mac OS X because it ships python 2.2
|
||||||
|
import boolcheck
|
||||||
|
|
||||||
|
# see if we are being asked to execute the subprocess code
|
||||||
|
if '-p' in sys.argv:
|
||||||
|
# run expects only the port number in sys.argv
|
||||||
|
sys.argv.remove('-p')
|
||||||
|
|
||||||
|
# this module will become the namepsace used by the interactive
|
||||||
|
# interpreter; remove all variables we have defined.
|
||||||
|
del sys, __file__, boolcheck, split, join
|
||||||
|
__import__('run').main()
|
||||||
|
else:
|
||||||
|
# Load idlelib/idle.py which starts the application.
|
||||||
|
import idle
|
|
@ -2,6 +2,8 @@ import sys
|
||||||
import time
|
import time
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
import boolcheck
|
||||||
|
|
||||||
import CallTips
|
import CallTips
|
||||||
import RemoteDebugger
|
import RemoteDebugger
|
||||||
import RemoteObjectBrowser
|
import RemoteObjectBrowser
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue