How to receive a FILE* from Python under MinGW?
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Fri Mar 23 04:48:39 EDT 2007
En Fri, 23 Mar 2007 01:47:22 -0300, John Pye <john.pye at gmail.com> escribió:
> On Mar 23, 3:33 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> wrote:
>> import msvcrt
>> fh = msvcrt.get_osfhandle(f.fileno())
> ..
>> example.filetest(fh)
>> f.close()
>
> Cool, that looks great, Gabriel.
>
> But is there any way I can hide the get_osfhandle call inside my
> Python module? That way I wouldn't need to request end users to make
> contorted 'if platform.system()=="Windows"' calls everywhere.
>
> Maybe this *is* workable, after all :-)
I can think of two ways:
- Define a Python function to do that, and test the platform just there.
Something like that:
def exportable_file(f):
if we_are_working_on_windows:
import msvcrt
return msvcrt.get_osfhandle(f.fileno())
else:
return f
And replace all places where a Python file goes into a C extension, with
exportable_file(f)
- Define your own file class, inheriting from file, and store that handle
as an attribute
class my_file_class(file):
def __init__(self, name, mode="r", buffering=-1):
file.__init__(self, name, mode, buffering)
self.handle = msvcrt.get_osfhandle(self.fileno())
But I've not checked this; I'm not sure if file creation always goes thru
this __init__; I assume the file will never change its FILE struct (f_fp
member) (uhm, is there any way to re-open a file?). Perhaps this approach
has many assumptions to be usable at all - uh, forget it.
--
Gabriel Genellina
More information about the Python-list
mailing list