如何在python中获取打开文件的win32句柄?

时间:2011-05-26 08:38:06

标签: python winapi

我确定这是在某处记录但我找不到......

我的代码是从另一个库中获取一个python对象(我​​无法修改),我需要在其上调用一些win32 api函数。

Python从file.fileno()返回一些不是os级句柄的东西,我的猜测是它给出了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 个答案:

答案 0 :(得分:10)

我找到了答案:

>>> msvcrt.get_osfhandle(a.fileno())
1956 # valid HANDLE

这实际上记录在http://docs.python.org/library/msvcrt.html上,不知道我是如何错过它的。

答案 1 :(得分:3)

来自win32file._get_osfhandle库的

PyWin32将返回您想要的内容。 win32file._get_osfhandle(a.fileno())在我的测试中返回与msvcrt.get_osfhandle(a.fileno())相同的内容。