我需要在 Python 中打开一个可写文件句柄,然后将文件描述符传递给 .NET 程序集中的函数(通过pythonnet 的clr
模块访问。
从 Python 文件对象获取到 win32HANDLE*
相当简单,如以下问题所示:
import clr
from Microsoft.Win32.SafeHandles import SafeFileHandle
from System.IO import FileStream, FileAccess
pyf=open("c:/temp/testing123.txt","w")
fileno=pyf.fileno()
print fileno # 6
handle = msvcrt.get_osfhandle(fileno)
print handle # 1832L
根据 MSDN,现在应该可以FileStream
从直线IntPtr
(句柄)或SafeFileHandle
包装器构造标准对象。
FileStream(IntPtr, FileAccess)
FileStream(SafeFileHandle, FileAccess)
问题是......我怎样才能说服clr
模块转换handle
为IntPtr
?
我尝试了以下各种版本,但它们都给了我错误:
FileStream(IntPtr(handle), True)
FileStream(IntPtr(Int64(handle), True)
FileStream(IntPtr(Int32(handle), True)
SafeFileHandle(IntPtr(handle), True)
...
=> TypeError ("value cannot be converted to System.IntPtr")
关于如何将这个该死的文件句柄转换为 C# 的任何建议?