I have the following code:
#!/usr/bin/python
export = open('/sys/class/gpio/export', 'w')
export.write('44\n')
而这段代码生成以下输出:
close failed in file object destructor:
IOError: [Errno 16] Device or resource busy
如果我在代码结尾处添加 export.close(),则会得到以下输出结果:
Traceback (most recent call last):
File "./test.py", line 5, in <module>
export.close()
IOError: [Errno 16] Device or resource busy
然而,如果我再次更改代码如下,它就完美地工作了:
#!/usr/bin/python
from time import sleep
export = open('/sys/class/gpio/export', 'w')
sleep(1)
export.write('44\n')
请注意,即使我在写入操作后休眠很长时间,.close仍然会失败。
编辑:
我将我的代码更改为以下内容:
with open('/sys/class/gpio/export', 'w') as export:
sleep(1)
export.write('44\n')
export.flush()
export.close()
仍然会出现错误:
Traceback (most recent call last):
File "./test.py", line 7, in <module>
export.flush()
IOError: [Errno 16] Device or resource busy
编辑2:
我的主要问题是您不能导出已经被导出的GPIO。我已经更新了我的代码,看起来像这样,现在它似乎可以工作了:
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')
这段代码成功地导出了一个GPIO,将其方向设置为“输出”,并激活它(值为1)。
export.flush()
会怎样呢? - Kevin/sys/class/gpio/export
是一个普通文件吗? - Remi Guanecho 44 > /sys/class/gpio/export
并且它可以工作吗?以及lsof
和stat
?如果是这样,那么我的最佳建议是标记您在此设备上安装的特定Linux版本,以希望得到一些使用配置更接近您的系统的专家。但是,如果不是这样,我认为您需要将Python脚本作为您正在运行成功的普通命令的任何用户来运行,即使那是您的常规用户。 - Two-Bit Alchemist