如何在python中获取打开文件的win32句柄?
我肯定这是某处记录的,但我找不到 我的代码是从另一个库(我无法修改)获取python对象,我需要对其调用一些win32 api函数 Python从file.fileno()返回的不是操作系统级别的句柄,我猜它给出了MSVCRT的fileno如何在python中获取打开文件的win32句柄?,python,winapi,Python,Winapi,我肯定这是某处记录的,但我找不到 我的代码是从另一个库(我无法修改)获取python对象,我需要对其调用一些win32 api函数 Python从file.fileno()返回的不是操作系统级别的句柄,我猜它给出了MSVCRT的fileno >>> ctypes.windll.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0) 1948 # <- HANDLE >>> file('test','r
>>> ctypes.windll.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0)
1948 # <- HANDLE
>>> file('test','r').fileno()
4 # <- not a HANDLE
>ctypes.windell.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0)
1948#>>文件('test','r')。文件号()
我找到了答案:
>>> msvcrt.get_osfhandle(a.fileno())
1956 # valid HANDLE
这实际上是在上记录的,不知道我怎么会错过它。win32file.\u从PyWin32
库中获取osfhandle
将返回您想要的内容。
win32file.\u get\u osfhandle(a.fileno())
返回的内容与我测试中的msvcrt.get\u osfhandle(a.fileno())
返回的内容相同。这似乎是一种黑客方法。我建议使用CreateFile方法,因为您可以完全控制传递给CreateFile的参数,而且这通常是获得句柄的正确方法。你也可以用win32file(而不是ctypes)来实现它。这可能有点骇人听闻,但我自己无法实现CreateFile(),因为我从不受我控制的代码中获得了一个python文件对象。