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) 68