如何在Python中获取打开文件的Win32句柄?

10 投票
2 回答
5401 浏览
提问于 2025-04-16 18:23

我相信这个问题在某个地方有说明,但我找不到...

我的代码从另一个库中获取了一个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,我真不知道我怎么会错过它。

撰写回答