[python] ctypes a file object
Hynek Fabian
hynek.fabian na firma.seznam.cz
Středa Listopad 24 18:20:24 CET 2010
Numericky handle ziskas metodou fileno() pythoniho file objektu.
Z nej muzes dostat ceckovou FILE* strukturu libc funkci fdopen().
Zdenko Podobný (Wednesday 24 November 2010 17:47:09):
> Zdravim,
>
> potrebujem v pythone robit s viacstrankovymi tiff subormi a po roznych
> testoch a googlovani som skoncil na tom, ze cisto python riesenie
> neexistuje. Najrozumnejsie sa mi javi pouzitie ctypes a kniznice
> leptonica. Problem je v tom, ze v niektorych pripadoch jej potrebujem
> posunut file object.
>
> Napr. (C kod):
> filein = "phototest.tif";
> fp = fopen(filein, "r");
> tiffGetCount(fp, &npages);
> fprintf(stderr, " Tiff: %d pages\n", npages);
> fclose(fp);
>
> Ked to skusim spravit v pythone, tak dostanem chybu:
>
> import ctypes
> leptonica = ctypes.CDLL("liblept.so")
> filein = "phototest.tif"
> fp = open(filein, "r")
> npages = leptonica.tiffGetCount(fp)
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know
> how to convert parameter 1
>
> Skusal som to aj cez PyFile_AsFile ale to tiez skonci s chybou:
> >>> import ctypes as C
> >>> lib = C.CDLL("liblept.so")
>
> >>> class FILE(C.Structure):
> ... pass
> ...
>
> >>> FILE_P = C.POINTER(FILE)
> >>> C.pythonapi.PyFile_AsFile.argtypes = [C.py_object]
> >>> C.pythonapi.PyFile_AsFile.restype = FILE_P
> >>> fp = C.pythonapi.PyFile_AsFile("phototest.tif")
> >>> npages = lib.tiffGetCount(fp)
>
> Error in tiffGetCount: stream not defined
>
> Skusal som googlovat, ale sa nic funkcne sa mi nepodarilo zostavit... Vie
> mi s tym niekto pomoc?
>
> Zd.
Další informace o konferenci Python