import ctypes, msvcrt, os, win32api, ctypes.util getMsvcrt=ctypes.cdll.msvcrt.getenv getMsvcr_=ctypes.cdll[ctypes.util.find_msvcrt()].getenv getMsvcrt.restype=getMsvcr_.restypy=ctypes.c_char_p methods=['os.environ','win32','os.?etenv','msvcrt','msvcr?'] print(12*' '+''.join(['%12s'%m for m in methods])) for m in methods: name,val='TEST_'+m,'foo' name_val='='.join([name,val]) if m=='os.environ': os.environ[name]=val elif m=='win32': win32api.SetEnvironmentVariable(name,val) elif m=='os.?etenv': os.putenv(name,val) elif m=='msvcrt': ctypes.cdll.msvcrt._putenv(name_val) elif m=='msvcr?': ctypes.cdll[ctypes.util.find_msvcrt()]._putenv(name_val) else: assert False res=(os.environ[name] if name in os.environ else None,win32api.GetEnvironmentVariable(name),os.getenv(name),getMsvcrt(name),getMsvcr_(name)) res=['OK' if v==val else '--' for v in res] print('%12s'%m+''.join(['%12s'%r for r in res]))