2011-05-26 76 views
8

我敢肯定,这是记录在某处,但我找不到它...如何在python中获得打开文件的win32句柄?

我的代码是从另一个库(我不能修改)获取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句柄?

+0

这似乎是一种做事的方法。我建议使用CreateFile方法,因为您可以完全控制传递给CreateFile的参数,并且它通常是获取句柄的正确方法。你也可以用win32file来代替(而不是ctypes)。 – Grim 2011-05-26 08:43:08

+0

它可能是hackish,但我不能做CreateFile()我自己,因为我从不在我的控制下的代码获取python文件对象。 – bdew 2011-05-26 08:50:56

回答

3

win32file._get_osfhandle from PyWin32库会返回你想要的。 win32file._get_osfhandle(a.fileno())在我的测试中返回的结果与msvcrt.get_osfhandle(a.fileno())相同。