Spaces:
Sleeping
Sleeping
| # startup.py | |
| # | |
| "The main application startup code for PythonWin." | |
| # | |
| # This does the basic command line handling. | |
| # Keep this as short as possible, cos error output is only redirected if | |
| # this runs OK. Errors in imported modules are much better - the messages go somewhere (not any more :-) | |
| import os | |
| import sys | |
| import win32api | |
| import win32ui | |
| if not sys.argv: | |
| # Initialize sys.argv from commandline. When sys.argv is empty list ( | |
| # different from [''] meaning "no cmd line arguments" ), then C | |
| # bootstrapping or another method of invocation failed to initialize | |
| # sys.argv and it will be done here. ( This was a workaround for a bug in | |
| # win32ui but is retained for other situations. ) | |
| argv = win32api.CommandLineToArgv(win32api.GetCommandLine()) | |
| sys.argv = argv[1:] | |
| if os.getcwd() not in sys.path and "." not in sys.path: | |
| sys.path.insert(0, os.getcwd()) | |
| # You may wish to redirect error output somewhere useful if you have startup errors. | |
| # eg, 'import win32traceutil' will do this for you. | |
| # import win32traceutil # Just uncomment this line to see error output! | |
| # An old class I used to use - generally only useful if Pythonwin is running under MSVC | |
| # class DebugOutput: | |
| # softspace=1 | |
| # def write(self,message): | |
| # win32ui.OutputDebug(message) | |
| # sys.stderr=sys.stdout=DebugOutput() | |
| # To fix a problem with Pythonwin when started from the Pythonwin directory, | |
| # we update the pywin path to ensure it is absolute. | |
| # If it is indeed relative, it will be relative to our current directory. | |
| # If its already absolute, then this will have no affect. | |
| import pywin | |
| import pywin.framework | |
| pywin.__path__[0] = win32ui.FullPath(pywin.__path__[0]) | |
| pywin.framework.__path__[0] = win32ui.FullPath(pywin.framework.__path__[0]) | |
| # make a few wierd sys values. This is so later we can clobber sys.argv to trick | |
| # scripts when running under a GUI environment. | |
| moduleName = "pywin.framework.intpyapp" | |
| sys.appargvoffset = 0 | |
| sys.appargv = sys.argv[:] | |
| # Must check for /app param here. | |
| if len(sys.argv) >= 2 and sys.argv[0].lower() in ("/app", "-app"): | |
| from . import cmdline | |
| moduleName = cmdline.FixArgFileName(sys.argv[1]) | |
| sys.appargvoffset = 2 | |
| newargv = sys.argv[sys.appargvoffset :] | |
| # newargv.insert(0, sys.argv[0]) | |
| sys.argv = newargv | |
| # Import the application module. | |
| __import__(moduleName) | |
| try: | |
| win32ui.GetApp()._obj_ | |
| # This worked - an app already exists - do nothing more | |
| except (AttributeError, win32ui.error): | |
| # This means either no app object exists at all, or the one | |
| # that does exist does not have a Python class (ie, was created | |
| # by the host .EXE). In this case, we do the "old style" init... | |
| from . import app | |
| if app.AppBuilder is None: | |
| raise TypeError("No application object has been registered") | |
| app.App = app.AppBuilder() | |