Как получить win32 дескриптор открытого файла в python? - PullRequest
9 голосов
/ 26 мая 2011

Я уверен, что это где-то задокументировано, но я не могу его найти ...

Мой код получает объект python из другой библиотеки (которую я не могу изменить), и мне нужновызовите некоторые функции API Win32 для него.

Python возвращает что-то, что не является дескриптором уровня ОС из file.fileno (), я предполагаю, что он дает fileno MSVCRT.

>>> ctypes.windll.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0)
1948 # <- HANDLE

>>> file('test','r').fileno()
4 # <- not a HANDLE

Как мне преобразовать его в настоящий дескриптор win32?

Ответы [ 2 ]

10 голосов
/ 26 мая 2011

Я нашел ответ:

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

Это действительно задокументировано на http://docs.python.org/library/msvcrt.html, не знаю, как я его пропустил.

3 голосов
/ 01 октября 2011

win32file._get_osfhandle из библиотеки PyWin32 вернет то, что вы хотите.win32file._get_osfhandle(a.fileno()) возвращает то же самое, что и msvcrt.get_osfhandle(a.fileno()) в моем тестировании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...