Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中获取打开文件的win32句柄?_Python_Winapi - Fatal编程技术网

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

如何在python中获取打开文件的win32句柄?,python,winapi,Python,Winapi,我肯定这是某处记录的,但我找不到 我的代码是从另一个库(我无法修改)获取python对象,我需要对其调用一些win32 api函数 Python从file.fileno()返回的不是操作系统级别的句柄,我猜它给出了MSVCRT的fileno >>> ctypes.windll.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0) 1948 # <- HANDLE >>> file('test','r

我肯定这是某处记录的,但我找不到

我的代码是从另一个库(我无法修改)获取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
>ctypes.windell.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0)
1948#>>文件('test','r')。文件号()
我找到了答案:

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

这实际上是在上记录的,不知道我怎么会错过它。

win32file.\u从
PyWin32
库中获取osfhandle
将返回您想要的内容。
win32file.\u get\u osfhandle(a.fileno())
返回的内容与我测试中的
msvcrt.get\u osfhandle(a.fileno())
返回的内容相同。

这似乎是一种黑客方法。我建议使用CreateFile方法,因为您可以完全控制传递给CreateFile的参数,而且这通常是获得句柄的正确方法。你也可以用win32file(而不是ctypes)来实现它。这可能有点骇人听闻,但我自己无法实现CreateFile(),因为我从不受我控制的代码中获得了一个python文件对象。