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

10

我相信这个问题的文档已经存在了,但是我找不到...

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


这似乎是一种笨拙的方法来处理事情。我建议使用CreateFile方法,因为你可以完全控制传递给CreateFile的参数,而且这通常是获取句柄的正确方法。你也可以使用win32file来实现(而不是ctypes)。 - Grim
可能有些不专业,但我无法自己使用CreateFile(),因为我从代码中获取了一个不受我的控制的Python文件对象。 - bdew
2个回答

12

4

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接