擅长:python、mysql、java
<p>感谢<a href="//article.gmane.org/gmane.comp.python.dotnet/1646" rel="nofollow">^{<cd1>} mailing list</a>上的好心人,我得到了答案。在</p>
<p>关键是使用<code>Overloads</code>构造函数将win32 <code>HANDLE</code>强制转换为<code>IntPtr</code>类型。在</p>
<p>下面是一个完整的工作示例:</p>
<pre><code>import tempfile, msvcrt
import clr, msvcrt
from System.IO import FileStream, FileAccess
from System import IntPtr
with tempfile.NamedTemporaryFile(suffix='.txt', delete=False) as pyf:
fileno=pyf.fileno()
print "fileno", fileno
handle = msvcrt.get_osfhandle(fileno)
print "HANDLE", handle
pyf.write("Python\n")
pyf.flush()
cs_handle = IntPtr.Overloads[long](handle)
cs_fs = FileStream(cs_handle, FileAccess.Write)
cs_fs.Write("CLR\n", 0, 4)
cs_fs.Flush()
print "file should contain a line from Python and a line from CLR: ", pyf.name
</code></pre>