Seite 1 von 1

PIL -> Sane -> fileno() = Problem ;-)

Verfasst: Mittwoch 13. April 2005, 16:30
von XT@ngel
Hi,
Ich hab ein Problem mit dem Sane Interface bzw scheint da ein Bug drinnen zu sein.

Es geht um die Methode: SaneDev.fileno()
Der Doc string von fileno():
"Return the file descriptor for the scanning device"

Jedoch liefert mir die Methode nur:

Code: Alles auswählen

Traceback (most recent call last):
  File "quickS.py", line 13, in ?
    fd = Scanner.fileno()
_sane.error: Invalid argument
Egal ob über Sane oder _sane, kommt immer das selbe raus.
Kann mir das mal bitte jemand bestätigen? :)
Weil ich werd hier noch total wuschig :mrgreen:

MfG
Andreas

Verfasst: Mittwoch 13. April 2005, 22:50
von CM
Hi Andreas,

auch wenn ich mich damit lächerlich mache: Was ist "Sane" überhaupt? Mein PIL (v. 1.1.5c1 ) kennt gar kein "Sane", "SaneDev", "_sane", etc.

Und da das Problem ja schon in Zeile 13 auftritt: Vielleicht magst Du die ersten 12 oder so Zeilen auch noch posten - kann ja vielleicht helfen.

Gruß,
Christian

Verfasst: Donnerstag 14. April 2005, 00:20
von XT@ngel
Sane ist praktisch der Standard um einen Scanner unter Linux zu betreiben:
http://www.sane-project.org/docs.html

Das Scannen mit:

Code: Alles auswählen

import sane
from PIL import Image
sane.init()
DeviceList = sane.get_devices()
Scanner = sane.open(DeviceList[0][0]) #Erste scanner der gefunden wird
Scanner.resolution = 150
Scanner.depth = 16
Scanner.br_x = 203.0
Scanner.br_y = 295.0
Scanner.start()
im=Scanner.snap()
Scanner.lamp_switch = 0
Scanner.close()
im.save('tmp.jpeg')
funktioniert.

Aber sobald ein

Code: Alles auswählen

Scanner.fileno() 
dazu kommt, gibts einen Fehler,
Sane ist nur ein Warpper Modul für _sane, deshalb dacht ich zuerst das in sane der Fehler liegt.
Aber ein blick in den Code vom Modul sane zeigt schnell das der Fehler wohl in _sane stecken muss.

Bisher ist alles was an code da ist, nur Testcode um zu sehen wie das Modul arbeitet.
Da xsane, (GUI für Sane) meiner Schwester zu komplizier ist ;) wollt ich was einfacheres schreiben.

BTW: kann mir jemand sagen wie ich mit Python einen USB überwache, um zu wissen welche Taste am Gerät (Scanner) gedrückt wird?

Danke
Andreas

Verfasst: Donnerstag 14. April 2005, 06:28
von CM
Aha, dann tut es mir leid: Ich habe keine Ahnung, wo das Problem liegen könnte. Ich habe ein wenig gesucht und nichts gefunden, was weiterhelfen könnte.
"Sane" sagte mir nichts und nach Deiner Frage habe ich geblaubt es sei ein Teil von PIL - und war vollkommen verwirrt ;-).

Hoffe hier kann Dir noch jemand helfen. Sonst versuche halt noch die Mailingliste.

Viel Glück,
Christian

Verfasst: Donnerstag 14. April 2005, 21:25
von BlackJack
CM hat geschrieben:"Sane" sagte mir nichts und nach Deiner Frage habe ich geblaubt es sei ein Teil von PIL - und war vollkommen verwirrt ;-).
Das `sane` Modul ist Bestandteil von PIL.

Zur `fileno()` Problematik kann ich auch nichts sagen. Wo genau fügst Du den Aufruf denn ein? Irgendwo zwischen `open` und `close` müsste es eigentlich klappen.

Verfasst: Freitag 15. April 2005, 07:34
von XT@ngel
BlackJack hat geschrieben: zwischen `open` und `close` müsste es eigentlich klappen.
Ich habs, war auch fast richtig ;) fileno() funktioniert erst wenn der Scanner auch wirklich beim scannen ist. Also nach start().
Was ja auch irgendwie logisch ist *g*

Ein blick in die API Doc hätte auch geholfen
http://www.sane-project.org/html/doc013.html :roll:

Danke!!

Verfasst: Donnerstag 21. April 2005, 19:37
von CM
In der Tat: sane ist Bestandteil von PIL. Ich hatte es allerdings nicht bei mir installiert, weil ich zu faul war PIL zu Fuß zu installieren, einen Installer nahm und sane auch nicht brauchte. (War eine Woche semi-offline und konnte erst jetzt herausfinden, woran es lag.)
Tut mir leid, wenn ich unnötig Verwirrung gestiftet habe und meine Beträge wenig produktiv waren.

Gruß,
Christian