diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-10-23 14:12:58 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-10-23 14:12:58 +0300 |
commit | 35fde5ff7d848130c30f95c4d281bfc77ae91179 (patch) | |
tree | cdc93cb155847e03043c262197a652544a8b3df2 /release/scripts/modules/sys_info.py | |
parent | 5d2620e9c22eabfa3df712bbca18b19be72b9fc3 (diff) |
System info: make it more resiliant to errors.
Using context manager for output file itself, and whole try/except block
to at least catch and print error in file.
Also some minor tweaks to previous 'list add-ons' commit.
Diffstat (limited to 'release/scripts/modules/sys_info.py')
-rw-r--r-- | release/scripts/modules/sys_info.py | 367 |
1 files changed, 184 insertions, 183 deletions
diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py index 176051870b0..5b81df28524 100644 --- a/release/scripts/modules/sys_info.py +++ b/release/scripts/modules/sys_info.py @@ -39,187 +39,188 @@ def write_sysinfo(filepath): r = r[1:-1] return r - output = open(filepath, 'w', encoding="utf-8") - - header = "= Blender %s System Information =\n" % bpy.app.version_string - lilies = "%s\n\n" % ((len(header) - 1) * "=") - output.write(lilies[:-1]) - output.write(header) - output.write(lilies) - - def title(text): - return "\n%s:\n%s" % (text, lilies) - - # build info - output.write(title("Blender")) - output.write( - "version: %s, branch: %s, commit date: %s %s, hash: %s, type: %s\n" % - (bpy.app.version_string, - prepr(bpy.app.build_branch), - prepr(bpy.app.build_commit_date), - prepr(bpy.app.build_commit_time), - prepr(bpy.app.build_hash), - prepr(bpy.app.build_type), - )) - - output.write("build date: %s, %s\n" % (prepr(bpy.app.build_date), prepr(bpy.app.build_time))) - output.write("platform: %s\n" % prepr(bpy.app.build_platform)) - output.write("binary path: %s\n" % prepr(bpy.app.binary_path)) - output.write("build cflags: %s\n" % prepr(bpy.app.build_cflags)) - output.write("build cxxflags: %s\n" % prepr(bpy.app.build_cxxflags)) - output.write("build linkflags: %s\n" % prepr(bpy.app.build_linkflags)) - output.write("build system: %s\n" % prepr(bpy.app.build_system)) - - # python info - output.write(title("Python")) - output.write("version: %s\n" % (sys.version)) - output.write("paths:\n") - for p in sys.path: - output.write("\t%r\n" % p) - - output.write(title("Python (External Binary)")) - output.write("binary path: %s\n" % prepr(bpy.app.binary_path_python)) - try: - py_ver = prepr(subprocess.check_output([ - bpy.app.binary_path_python, - "--version", - ]).strip()) - except Exception as e: - py_ver = str(e) - output.write("version: %s\n" % py_ver) - del py_ver - - output.write(title("Directories")) - output.write("scripts:\n") - for p in bpy.utils.script_paths(): - output.write("\t%r\n" % p) - output.write("user scripts: %r\n" % (bpy.utils.script_path_user())) - output.write("pref scripts: %r\n" % (bpy.utils.script_path_pref())) - output.write("datafiles: %r\n" % (bpy.utils.user_resource('DATAFILES'))) - output.write("config: %r\n" % (bpy.utils.user_resource('CONFIG'))) - output.write("scripts : %r\n" % (bpy.utils.user_resource('SCRIPTS'))) - output.write("autosave: %r\n" % (bpy.utils.user_resource('AUTOSAVE'))) - output.write("tempdir: %r\n" % (bpy.app.tempdir)) - - output.write(title("FFmpeg")) - ffmpeg = bpy.app.ffmpeg - if ffmpeg.supported: - for lib in ("avcodec", "avdevice", "avformat", "avutil", "swscale"): + with open(filepath, 'w', encoding="utf-8") as output: + try: + header = "= Blender %s System Information =\n" % bpy.app.version_string + lilies = "%s\n\n" % ((len(header) - 1) * "=") + output.write(lilies[:-1]) + output.write(header) + output.write(lilies) + + def title(text): + return "\n%s:\n%s" % (text, lilies) + + # build info + output.write(title("Blender")) output.write( - "%s:%s%r\n" % (lib, " " * (10 - len(lib)), - getattr(ffmpeg, lib + "_version_string"))) - else: - output.write("Blender was built without FFmpeg support\n") - - if bpy.app.build_options.sdl: - output.write(title("SDL")) - output.write("Version: %s\n" % bpy.app.sdl.version_string) - output.write("Loading method: ") - if bpy.app.build_options.sdl_dynload: - output.write("dynamically loaded by Blender (WITH_SDL_DYNLOAD=ON)\n") - else: - output.write("linked (WITH_SDL_DYNLOAD=OFF)\n") - if not bpy.app.sdl.available: - output.write("WARNING: Blender could not load SDL library\n") - - output.write(title("Other Libraries")) - ocio = bpy.app.ocio - output.write("OpenColorIO: ") - if ocio.supported: - if ocio.version_string == "fallback": - output.write("Blender was built with OpenColorIO, " + - "but it currently uses fallback color management.\n") - else: - output.write("%s\n" % (ocio.version_string)) - else: - output.write("Blender was built without OpenColorIO support\n") - - oiio = bpy.app.oiio - output.write("OpenImageIO: ") - if ocio.supported: - output.write("%s\n" % (oiio.version_string)) - else: - output.write("Blender was built without OpenImageIO support\n") - - output.write("OpenShadingLanguage: ") - if bpy.app.build_options.cycles: - if bpy.app.build_options.cycles_osl: - from _cycles import osl_version_string - output.write("%s\n" % (osl_version_string)) - else: - output.write("Blender was built without OpenShadingLanguage support in Cycles\n") - else: - output.write("Blender was built without Cycles support\n") - - openvdb = bpy.app.openvdb - output.write("OpenVDB: ") - if openvdb.supported: - output.write("%s\n" % openvdb.version_string) - else: - output.write("Blender was built without OpenVDB support\n") - - alembic = bpy.app.alembic - output.write("Alembic: ") - if alembic.supported: - output.write("%s\n" % alembic.version_string) - else: - output.write("Blender was built without Alembic support\n") - - if not bpy.app.build_options.sdl: - output.write("SDL: Blender was built without SDL support\n") - - if bpy.app.background: - output.write("\nOpenGL: missing, background mode\n") - else: - output.write(title("OpenGL")) - version = bgl.glGetString(bgl.GL_RENDERER) - output.write("renderer:\t%r\n" % version) - output.write("vendor:\t\t%r\n" % (bgl.glGetString(bgl.GL_VENDOR))) - output.write("version:\t%r\n" % (bgl.glGetString(bgl.GL_VERSION))) - output.write("extensions:\n") - - glext = sorted(bgl.glGetString(bgl.GL_EXTENSIONS).split()) - for l in glext: - output.write("\t%s\n" % l) - - output.write(title("Implementation Dependent OpenGL Limits")) - limit = bgl.Buffer(bgl.GL_INT, 1) - bgl.glGetIntegerv(bgl.GL_MAX_TEXTURE_UNITS, limit) - output.write("Maximum Fixed Function Texture Units:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_ELEMENTS_VERTICES, limit) - output.write("Maximum DrawElements Vertices:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_ELEMENTS_INDICES, limit) - output.write("Maximum DrawElements Indices:\t%d\n" % limit[0]) - - output.write("\nGLSL:\n") - bgl.glGetIntegerv(bgl.GL_MAX_VARYING_FLOATS, limit) - output.write("Maximum Varying Floats:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_VERTEX_ATTRIBS, limit) - output.write("Maximum Vertex Attributes:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_VERTEX_UNIFORM_COMPONENTS, limit) - output.write("Maximum Vertex Uniform Components:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, limit) - output.write("Maximum Fragment Uniform Components:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, limit) - output.write("Maximum Vertex Image Units:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_TEXTURE_IMAGE_UNITS, limit) - output.write("Maximum Fragment Image Units:\t%d\n" % limit[0]) - bgl.glGetIntegerv(bgl.GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, limit) - output.write("Maximum Pipeline Image Units:\t%d\n" % limit[0]) - - if bpy.app.build_options.cycles: - import cycles - output.write(title("Cycles")) - output.write(cycles.engine.system_info()) - - import addon_utils - addon_utils.modules() - output.write(title("Enabled add-ons")) - for addon in bpy.context.user_preferences.addons.keys(): - addon_mod = addon_utils.addons_fake_modules.get(addon, None) - if addon_mod is None: - output.write("\t %s (MISSING)\n" % (addon)) - else: - output.write("\t %s (%s, %s)\n" % (addon, addon_mod.bl_info.get('version', "UNKNOWN"), addon_mod.__file__)) - - output.close() + "version: %s, branch: %s, commit date: %s %s, hash: %s, type: %s\n" % + (bpy.app.version_string, + prepr(bpy.app.build_branch), + prepr(bpy.app.build_commit_date), + prepr(bpy.app.build_commit_time), + prepr(bpy.app.build_hash), + prepr(bpy.app.build_type), + )) + + output.write("build date: %s, %s\n" % (prepr(bpy.app.build_date), prepr(bpy.app.build_time))) + output.write("platform: %s\n" % prepr(bpy.app.build_platform)) + output.write("binary path: %s\n" % prepr(bpy.app.binary_path)) + output.write("build cflags: %s\n" % prepr(bpy.app.build_cflags)) + output.write("build cxxflags: %s\n" % prepr(bpy.app.build_cxxflags)) + output.write("build linkflags: %s\n" % prepr(bpy.app.build_linkflags)) + output.write("build system: %s\n" % prepr(bpy.app.build_system)) + + # python info + output.write(title("Python")) + output.write("version: %s\n" % (sys.version)) + output.write("paths:\n") + for p in sys.path: + output.write("\t%r\n" % p) + + output.write(title("Python (External Binary)")) + output.write("binary path: %s\n" % prepr(bpy.app.binary_path_python)) + try: + py_ver = prepr(subprocess.check_output([ + bpy.app.binary_path_python, + "--version", + ]).strip()) + except Exception as e: + py_ver = str(e) + output.write("version: %s\n" % py_ver) + del py_ver + + output.write(title("Directories")) + output.write("scripts:\n") + for p in bpy.utils.script_paths(): + output.write("\t%r\n" % p) + output.write("user scripts: %r\n" % (bpy.utils.script_path_user())) + output.write("pref scripts: %r\n" % (bpy.utils.script_path_pref())) + output.write("datafiles: %r\n" % (bpy.utils.user_resource('DATAFILES'))) + output.write("config: %r\n" % (bpy.utils.user_resource('CONFIG'))) + output.write("scripts : %r\n" % (bpy.utils.user_resource('SCRIPTS'))) + output.write("autosave: %r\n" % (bpy.utils.user_resource('AUTOSAVE'))) + output.write("tempdir: %r\n" % (bpy.app.tempdir)) + + output.write(title("FFmpeg")) + ffmpeg = bpy.app.ffmpeg + if ffmpeg.supported: + for lib in ("avcodec", "avdevice", "avformat", "avutil", "swscale"): + output.write( + "%s:%s%r\n" % (lib, " " * (10 - len(lib)), + getattr(ffmpeg, lib + "_version_string"))) + else: + output.write("Blender was built without FFmpeg support\n") + + if bpy.app.build_options.sdl: + output.write(title("SDL")) + output.write("Version: %s\n" % bpy.app.sdl.version_string) + output.write("Loading method: ") + if bpy.app.build_options.sdl_dynload: + output.write("dynamically loaded by Blender (WITH_SDL_DYNLOAD=ON)\n") + else: + output.write("linked (WITH_SDL_DYNLOAD=OFF)\n") + if not bpy.app.sdl.available: + output.write("WARNING: Blender could not load SDL library\n") + + output.write(title("Other Libraries")) + ocio = bpy.app.ocio + output.write("OpenColorIO: ") + if ocio.supported: + if ocio.version_string == "fallback": + output.write("Blender was built with OpenColorIO, " + + "but it currently uses fallback color management.\n") + else: + output.write("%s\n" % (ocio.version_string)) + else: + output.write("Blender was built without OpenColorIO support\n") + + oiio = bpy.app.oiio + output.write("OpenImageIO: ") + if ocio.supported: + output.write("%s\n" % (oiio.version_string)) + else: + output.write("Blender was built without OpenImageIO support\n") + + output.write("OpenShadingLanguage: ") + if bpy.app.build_options.cycles: + if bpy.app.build_options.cycles_osl: + from _cycles import osl_version_string + output.write("%s\n" % (osl_version_string)) + else: + output.write("Blender was built without OpenShadingLanguage support in Cycles\n") + else: + output.write("Blender was built without Cycles support\n") + + openvdb = bpy.app.openvdb + output.write("OpenVDB: ") + if openvdb.supported: + output.write("%s\n" % openvdb.version_string) + else: + output.write("Blender was built without OpenVDB support\n") + + alembic = bpy.app.alembic + output.write("Alembic: ") + if alembic.supported: + output.write("%s\n" % alembic.version_string) + else: + output.write("Blender was built without Alembic support\n") + + if not bpy.app.build_options.sdl: + output.write("SDL: Blender was built without SDL support\n") + + if bpy.app.background: + output.write("\nOpenGL: missing, background mode\n") + else: + output.write(title("OpenGL")) + version = bgl.glGetString(bgl.GL_RENDERER) + output.write("renderer:\t%r\n" % version) + output.write("vendor:\t\t%r\n" % (bgl.glGetString(bgl.GL_VENDOR))) + output.write("version:\t%r\n" % (bgl.glGetString(bgl.GL_VERSION))) + output.write("extensions:\n") + + glext = sorted(bgl.glGetString(bgl.GL_EXTENSIONS).split()) + for l in glext: + output.write("\t%s\n" % l) + + output.write(title("Implementation Dependent OpenGL Limits")) + limit = bgl.Buffer(bgl.GL_INT, 1) + bgl.glGetIntegerv(bgl.GL_MAX_TEXTURE_UNITS, limit) + output.write("Maximum Fixed Function Texture Units:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_ELEMENTS_VERTICES, limit) + output.write("Maximum DrawElements Vertices:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_ELEMENTS_INDICES, limit) + output.write("Maximum DrawElements Indices:\t%d\n" % limit[0]) + + output.write("\nGLSL:\n") + bgl.glGetIntegerv(bgl.GL_MAX_VARYING_FLOATS, limit) + output.write("Maximum Varying Floats:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_VERTEX_ATTRIBS, limit) + output.write("Maximum Vertex Attributes:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_VERTEX_UNIFORM_COMPONENTS, limit) + output.write("Maximum Vertex Uniform Components:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, limit) + output.write("Maximum Fragment Uniform Components:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, limit) + output.write("Maximum Vertex Image Units:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_TEXTURE_IMAGE_UNITS, limit) + output.write("Maximum Fragment Image Units:\t%d\n" % limit[0]) + bgl.glGetIntegerv(bgl.GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, limit) + output.write("Maximum Pipeline Image Units:\t%d\n" % limit[0]) + + if bpy.app.build_options.cycles: + import cycles + output.write(title("Cycles")) + output.write(cycles.engine.system_info()) + + import addon_utils + addon_utils.modules() + output.write(title("Enabled add-ons")) + for addon in bpy.context.user_preferences.addons.keys(): + addon_mod = addon_utils.addons_fake_modules.get(addon, None) + if addon_mod is None: + output.write("%s (MISSING)\n" % (addon)) + else: + output.write("%s (version: %s, path: %s)\n" % + (addon, addon_mod.bl_info.get('version', "UNKNOWN"), addon_mod.__file__)) + except Exception as e: + output.write("ERROR: %s\n" % e) |