在windows上用python访问msvcrt的方法有什么不同?

在windows上用python访问msvcrt的方法有什么不同?,python,windows,ctypes,msvcrt,Python,Windows,Ctypes,Msvcrt,在windows上,以下各项之间的区别是什么 import msvcrt as x vs vs vs 我认为后两者是等价的。但前两个从未(清楚地)记录在案,而且严格来说似乎更好。例如,从使用不同的msvcr*.dll(例如,matlab)的其他上下文运行python时,将第三个替换为第二个。import msvcrt导入python dll中内置的python扩展模块pythonXY.dll。此模块封装了一些有用的CRT函数,如open\u osfhandle,get\u osfhandle,

在windows上,以下各项之间的区别是什么

import msvcrt as x
vs

vs

vs


我认为后两者是等价的。但前两个从未(清楚地)记录在案,而且严格来说似乎更好。例如,从使用不同的
msvcr*.dll
(例如,matlab)的其他上下文运行python时,将第三个替换为第二个。

import msvcrt
导入python dll中内置的python扩展模块pythonXY.dll。此模块封装了一些有用的CRT函数,如
open\u osfhandle
get\u osfhandle
,以及
setmode
ctypes.cdll.msvcrt
加载Windows专用CRT,msvcrt.dll,该文件可通过ctypes
cdll
实例访问。非常不鼓励与此CRT链接,但这并不能阻止人们这样做——特别是通过MinGW。
find_library('c')
find_library('m')
间接调用
find_msvcrt
,这会为用于构建解释器的Visual Studio版本推断CRT的名称,如“msvcr90.dll”或“msvcr100.dll“。对于Python3.5+,这个API在Windows上的未来是悬而未决的。这取决于Visual Studio 2015引入的新的通用CRT的工作方式。如果ucrtbase.dll停止按名称导出,则动态加载它将毫无意义。您必须使用一个
api ms win crt-*
dll。Python
msvcrt
模块不使用msvcrt.dll。它只是从Python的链接CRT中公开了某些有用的函数,对于Python2.7来说是msvcr90.dll,对于Python3.4来说是msvcr100.dll,对于Python3.5来说是几个api ms win CRT dll(转发到ucrtbase.dll)(跟踪打开文件的状态和缓冲的高级stdio结构;python3仅对REPL shell使用stdio
file
指针)或者低级别的
ioinfo
结构可能会有所不同。后一种结构将文本/二进制模式文件描述符绑定到Windows文件句柄。CRT文件描述符和Windows文件句柄之间的映射对于过程中的每个CRT都是唯一的。此外,每个CRT使用自己的堆来存放
malloc
free
(包装窗口
HeapAlloc
HeapFree
),因此分配内存和释放内存是错误的。
x = ctypes.cdll.msvcrt
x = ctypes.CDLL(find_library('c'))
x = ctypes.CDLL(ctypes.util.find_msvcrt())