Je le code suivant:Fichier non prêt pour l'écriture après ouverture?
#!/usr/bin/python
export = open('/sys/class/gpio/export', 'w')
export.write('44\n')
Et ce code produit la sortie suivante:
close failed in file object destructor:
IOError: [Errno 16] Device or resource busy
Si je change le code en ajoutant un export.close() à la fin, je reçois ce en sortie:
Traceback (most recent call last):
File "./test.py", line 5, in <module>
export.close()
IOError: [Errno 16] Device or resource busy
Cependant, si je change le code à nouveau en tant que tel, il fonctionne parfaitement:
#!/usr/bin/python
from time import sleep
export = open('/sys/class/gpio/export', 'w')
sleep(1)
export.write('44\n')
Notez que .close TOUJOURS échoue, même si je mets un long sommeil après l'écriture.
Edit:
Changé mon code pour les suivantes:
with open('/sys/class/gpio/export', 'w') as export:
sleep(1)
export.write('44\n')
export.flush()
export.close()
donne encore des erreurs:
Traceback (most recent call last):
File "./test.py", line 7, in <module>
export.flush()
IOError: [Errno 16] Device or resource busy
Edit 2:
Mon principal problème est avéré être que vous ne pouvez pas exporter un GPIO déjà exporté. J'ai mis à jour mon code pour ressembler à ceci et il semble fonctionner:
from os import path
if not path.isdir('/sys/class/gpio/gpio44'):
with open('/sys/class/gpio/export', 'w') as export:
export.write('44\n')
if path.exists('/sys/class/gpio/gpio44/direction'):
with open('/sys/class/gpio/gpio44/direction', 'w') as gpio44_dir:
gpio44_dir.write('out\n')
if path.exists('/sys/class/gpio/gpio44/value'):
with open('/sys/class/gpio/gpio44/value', 'w') as gpio44_val:
gpio44_val.write('1\n')
Ce code exporte avec succès un GPIO, définit sa direction à « sortir » et actifs qu'il (valeur 1).
Ceci est un coup dans le noir, mais que faire si vous faites 'export.flush()' avant de fermer? – Kevin
Est-ce que '/ sys/class/gpio/export' est un fichier normal? –
Pourriez-vous essayer d'utiliser le gestionnaire de contexte python? comme ça: avec open ('/ sys/class/gpio/export', 'w') comme export: export.write (...) – Solo