我需要在Python在.NET组件(经由pythonnet's clr
module访问打开一个可写的文件句柄,然后手离开文件描述符的功能。如何从Python文件句柄打开.NET FileStream对象?
从Python文件对象获取到的win32 HANDLE*
是相当简单的,如图this question:
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
According to MSDN,应该现在是可能的,无论是从直IntPtr
(把手)构建标准FileStream
对象或从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#有什么建议?
这个怎么样? http://stackoverflow.com/a/14334609/2230844 – denfromufa
否则为什么不使用COM,如果这是Win32? – denfromufa
@denfromufa,由于各种原因,CLR API对于这个项目来说是优越的。您链接的答案解释了如何从C++获取托管句柄到C#中,但不幸的是,这对Python的情况并没有帮助。 –