source: python/trunk/Lib/plat-mac/appletrawmain.py@ 6

Last change on this file since 6 was 2, checked in by Yuri Dario, 15 years ago

Initial import for vendor code.

  • Property svn:eol-style set to native
File size: 2.0 KB
Line 
1# Emulate sys.argv and run __main__.py or __main__.pyc in an environment that
2# is as close to "normal" as possible.
3#
4# This script is put into __rawmain__.pyc for applets that need argv
5# emulation, by BuildApplet and friends.
6#
7
8from warnings import warnpy3k
9warnpy3k("In 3.x, the appletrawmain module is removed.", stacklevel=2)
10
11import argvemulator
12import os
13import sys
14import marshal
15
16#
17# Make sure we have an argv[0], and make _dir point to the Resources
18# directory.
19#
20if not sys.argv or sys.argv[0][:1] == '-':
21 # Insert our (guessed) name.
22 _dir = os.path.split(sys.executable)[0] # removes "python"
23 _dir = os.path.split(_dir)[0] # Removes "MacOS"
24 _dir = os.path.join(_dir, 'Resources')
25 sys.argv.insert(0, '__rawmain__')
26else:
27 _dir = os.path.split(sys.argv[0])[0]
28#
29# Add the Resources directory to the path. This is where files installed
30# by BuildApplet.py with the --extra option show up, and if those files are
31# modules this sys.path modification is necessary to be able to import them.
32#
33sys.path.insert(0, _dir)
34#
35# Create sys.argv
36#
37argvemulator.ArgvCollector().mainloop()
38#
39# Find the real main program to run
40#
41__file__ = os.path.join(_dir, '__main__.py')
42if os.path.exists(__file__):
43 #
44 # Setup something resembling a normal environment and go.
45 #
46 sys.argv[0] = __file__
47 del argvemulator, os, sys, _dir
48 execfile(__file__)
49else:
50 __file__ = os.path.join(_dir, '__main__.pyc')
51 if os.path.exists(__file__):
52 #
53 # If we have only a .pyc file we read the code object from that
54 #
55 sys.argv[0] = __file__
56 _fp = open(__file__, 'rb')
57 _fp.read(8)
58 __code__ = marshal.load(_fp)
59 #
60 # Again, we create an almost-normal environment (only __code__ is
61 # funny) and go.
62 #
63 del argvemulator, os, sys, marshal, _dir, _fp
64 exec __code__
65 else:
66 sys.stderr.write("%s: neither __main__.py nor __main__.pyc found\n"%sys.argv[0])
67 sys.exit(1)
Note: See TracBrowser for help on using the repository browser.