如何在Python中获取打开文件的Win32句柄?
我相信这个问题在某个地方有说明,但我找不到...
我的代码从另一个库中获取了一个Python对象(我无法修改这个库),然后我需要在这个对象上调用一些win32的API函数。
Python返回的东西不是通过file.fileno()得到的操作系统级别的句柄,我猜它给的是MSVCRT的fileno。
>>> ctypes.windll.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0)
1948 # <- HANDLE
>>> file('test','r').fileno()
4 # <- not a HANDLE
我该如何把它转换成一个真正的win32句柄呢?
2 个回答
4
来自 PyWin32
库的 win32file._get_osfhandle
可以给你想要的结果。win32file._get_osfhandle(a.fileno())
和我测试过的 msvcrt.get_osfhandle(a.fileno())
返回的是一样的东西。
12
我找到了答案:
>>> msvcrt.get_osfhandle(a.fileno())
1956 # valid HANDLE
其实在这个网站上有详细说明:http://docs.python.org/library/msvcrt.html,我真不知道我怎么会错过它。