def scriptinfo(): ''' Returns a dictionary with information about the running top level Python script: --------------------------------------------------------------------------- dir: directory containing script or compiled executable name: name of script or executable source: name of source code file --------------------------------------------------------------------------- "name" and "source" are identical if and only if running interpreted code. When running code compiled by py2exe or cx_freeze, "source" contains the name of the originating Python script. If compiled by PyInstaller, "source" contains no meaningful information. ''' import os, sys, inspect #--------------------------------------------------------------------------- # scan through call stack for caller information #--------------------------------------------------------------------------- for teil in inspect.stack(): # skip system calls if teil[1].startswith("<"): continue if teil[1].upper().startswith(sys.exec_prefix.upper()): continue trc = teil[1] # trc contains highest level calling script name # check if we have been compiled if getattr(sys, 'frozen', False): scriptdir, scriptname = os.path.split(sys.executable) return {"dir": scriptdir, "name": scriptname, "source": trc} # from here on, we are in the interpreted case scriptdir, trc = os.path.split(trc) # if trc did not contain directory information, # the current working directory is what we need if not scriptdir: scriptdir = os.getcwd() scr_dict ={"name": trc, "source": trc, "dir": scriptdir} return scr_dict