2010-04-24 7 views
0

Je cours un programme python. Quand il get à ces lignes:
f = open("/dev/bus/usb/007/005", "r")
x = fcntl.ioctl(f.fileno(), 0x84005001, '\x00' * 256)
Il échoue en disant:
IOError: [Errno 1] Opération non autorisée
Ce qui pourrait être à l'origine de ce problème?Opération python non autorisée (graphtecprint)

+0

qui donne l'erreur, la première ou la deuxième ligne. que dit la traceback? – joaquin

+0

la deuxième ligne est – eyecreate

Répondre

1

Autorisations du système de fichiers?

Que dit ls -l/dev/bus/usb/007/005?

est-ce que cat/dev/bus/usb/007/005 fonctionne ou signale-t-il la même erreur?

+0

la sortie du premier est: 'crw-rw-rw- 1 racine lp 189, 772 24.04.2010 15:58/dev/bus/usb/007/00' la commande cat imprime un peu bizarre caractères au terminal. – eyecreate

+0

En outre, l'exécution en tant que root génère la même chose. – eyecreate

+1

alors probablement l'ioctl échoue. Je n'ai aucune connaissance plus profonde des dispositifs d'usb et des ioctls. L'ioctl vous essayez de faire pourrait être - seulement permis par root - nombre magique faux - ne fonctionne que sur les fichiers ouverts r/w Désolé je ne peux deviner – plaisthos

0

Le troisième argument fcntl.ioctl, tel que documenté here, doit être une chaîne de 1024 octets (et pas seulement 256), ou, mieux, un inscriptible peut-être même plus grand-buffer - l'objet sous-jacent pourrait être un array.array d'octets . Malheureusement, vous devez savoir à l'avance combien d'espace le résultat aura besoin, mais vous pouvez jouer en toute sécurité avec quelques Ko (que ioctl semble être le code "get device id", mais je ne suis pas sûr de la longueur maximale du résultat pourrait être).

Questions connexes