/
githubmirror
/
libsmbios
Обзор
Документация
Войти
/
githubmirror
/
libsmbios
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/python/libsmbios_c/system_info.py
137 строк
5 KB
Mario Limonciello
Convert to python3 (Closes: #7)
25 янв 2018, 21:10
25 янв 2018, 21:10
2b22502
Код
Авторство
О чём код?
# vim:tw=0:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python: ############################################################################# # # Copyright (c) 2005 Dell Computer Corporation # Dual Licenced under GNU GPL and OSL # ############################################################################# """ systeminfo: python interface to functions in libsmbios_c system_info.h """ # imports (alphabetical) import ctypes from libsmbios_c import libsmbios_c_DLL as DLL from ._common import errorOnNullPtrFN, errorOnNegativeFN, errorOnZeroFN, freeLibStringFN, c_utf8_p from .trace_decorator import traceLog, getLog, strip_trailing_whitespace __all__ = [] #// format error string #const char *token_table_strerror(const struct token_table *m); # define strerror first so we can use it in error checking other functions. DLL.sysinfo_strerror.argtypes = [ ] DLL.sysinfo_strerror.restype = c_utf8_p @traceLog() def _strerror(): print(DLL.sysinfo_strerror()) return Exception # const char *smbios_get_library_version_string(); DLL.smbios_get_library_version_string.argtypes = [] DLL.smbios_get_library_version_string.restype = c_utf8_p get_library_version_string = DLL.smbios_get_library_version_string __all__.append("get_library_version_string") # const char *smbios_get_library_version_major(); DLL.smbios_get_library_version_major.argtypes = [] DLL.smbios_get_library_version_major.restype = ctypes.c_int get_library_version_major = DLL.smbios_get_library_version_major __all__.append("get_library_version_major") # const char *smbios_get_library_version_minor(); DLL.smbios_get_library_version_minor.argtypes = [] DLL.smbios_get_library_version_minor.restype = ctypes.c_int get_library_version_minor = DLL.smbios_get_library_version_minor __all__.append("get_library_version_minor") # const char *sysinfo_get_dell_system_id(); DLL.sysinfo_get_dell_system_id.argtypes = [] DLL.sysinfo_get_dell_system_id.restype = ctypes.c_int DLL.sysinfo_get_dell_system_id.errcheck=errorOnZeroFN(lambda r,f,a: Exception(_("Could not determine System ID."))) get_dell_system_id = DLL.sysinfo_get_dell_system_id __all__.append("get_dell_system_id") # void sysinfo_string_free( const char * ); DLL.sysinfo_string_free.argtypes = [ctypes.POINTER(ctypes.c_char),] DLL.sysinfo_string_free.restype = None def _mk_simple_sysinfo_str_fn(name): import sys getattr(DLL, "sysinfo_%s" % name).argtypes=[] #getattr(DLL, "sysinfo_%s" % name).restype=c_utf8 getattr(DLL, "sysinfo_%s" % name).restype=ctypes.POINTER(ctypes.c_char) getattr(DLL, "sysinfo_%s" % name).errcheck=strip_trailing_whitespace()(freeLibStringFN( DLL.sysinfo_string_free, lambda r,f,a: Exception(_strerror() ))) sys.modules[__name__].__dict__[name] = getattr(DLL, "sysinfo_%s" % name) __all__.append(name) _mk_simple_sysinfo_str_fn("get_system_name") _mk_simple_sysinfo_str_fn("get_vendor_name") _mk_simple_sysinfo_str_fn("get_bios_version") _mk_simple_sysinfo_str_fn("get_asset_tag") _mk_simple_sysinfo_str_fn("get_service_tag") _mk_simple_sysinfo_str_fn("get_property_ownership_tag") @traceLog() def set_service_tag(newtag, pass_ascii=None, pass_scancode=None): return DLL.sysinfo_set_service_tag(newtag, pass_ascii, pass_scancode) __all__.append("set_service_tag") DLL.sysinfo_set_asset_tag.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p] DLL.sysinfo_set_asset_tag.restype = ctypes.c_int DLL.sysinfo_set_asset_tag.errcheck=errorOnNegativeFN(lambda r,f,a: _strerror()) @traceLog() def set_asset_tag(newtag, pass_ascii=None, pass_scancode=None): return DLL.sysinfo_set_asset_tag(newtag, pass_ascii, pass_scancode) __all__.append("set_asset_tag") DLL.sysinfo_set_property_ownership_tag.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p] DLL.sysinfo_set_property_ownership_tag.restype = ctypes.c_int DLL.sysinfo_set_property_ownership_tag.errcheck=errorOnNegativeFN(lambda r,f,a: _strerror()) @traceLog() def set_property_ownership_tag(newtag, pass_ascii=None, pass_scancode=None): return DLL.sysinfo_set_property_ownership_tag(newtag, pass_ascii, pass_scancode) __all__.append("set_property_ownership_tag") if __name__ == "__main__": exitRet = 0 def pr(s, f): try: ret = f() except Exception as e: exitRet=1 ret = str(e) print("Error getting the", end=' ') print(s % ret) pr("Libsmbios: %s", get_library_version_string) try: sysid = "0x%04X" % get_dell_system_id() except Exception as e: exitRet=1 print("Error getting the", end=' ') sysid = str(e) print("System ID: %s" % sysid) pr("Service Tag: %s", get_service_tag) pr("Asset Tag: %s", get_asset_tag) try: esc = int(get_service_tag(), 36) except Exception as e: esc = str(e) print("Error getting the", end=' ') print("Express Service Code: %s" % esc) pr("Product Name: %s", get_system_name) pr("BIOS Version: %s", get_bios_version) pr("Vendor: %s", get_vendor_name) pr("Property Ownership Tag: %s", get_property_ownership_tag) import sys sys.exit(exitRet)