toto je trochu na mna zhurta ;-) Priklad by mi dost pomohol... Inak zabudol som - potrebujem pokial mozno multiplatformove riesenie. Neviem, ci som dobre pochopil odporucanie, ale na win som to skusil takto:<br><br>import ctypes, msvcrt, os<br>

<br>leptonica = ctypes.cdll.leptonlib<br>fp = open("phototest.tif", "r")<br>fh = msvcrt.get_osfhandle(fp.fileno())  # get file handle for the file descriptor<br>fd = msvcrt.open_osfhandle(fh, os.O_RDONLY)  # Create a C runtime file descriptor from the file handle <br>

ofd = os.fdopen(fd, 'r')<br>npages = leptonica.tiffGetCount(ofd)<br><br>Vysledok:<br><br>Traceback (most recent call last):<br>  File "<stdin>", line 1, in <module><br>ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1<br>

<br>Zd.<br><div class="gmail_quote">2010/11/24 Hynek Fabian <span dir="ltr"><<a href="mailto:hynek.fabian@firma.seznam.cz">hynek.fabian@firma.seznam.cz</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

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