[英]How to use a python package with sudo privileges inside Flask?
通过本教程,我在 Raspberry Pi 4 Model B 中设置了 Flask。
操作系统 = Ubuntu 服务器 20.04.2 LTS
蟒蛇 = 3.8
请记住,我正在为我的 Flask 应用程序使用虚拟环境,如教程中所示,我的 Flask 应用程序运行得非常好。
现在我在同一个 venv 中安装了Adafruit_DHT
并尝试在其中一个端点中使用以下代码
import Adafruit_DHT
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 24)
我收到以下错误
File "/usr/local/lib/python3.8/dist-packages/Adafruit_DHT/common.py", line 81, in read
return platform.read(sensor, pin)
File "/usr/local/lib/python3.8/dist-packages/Adafruit_DHT/Raspberry_Pi_2.py", line 34, in read
raise RuntimeError('Error accessing GPIO.')
RuntimeError: Error accessing GPIO.
所以,在那之后,我创建了一个简单的 python 脚本,比如z.py
并在其中编写了上面的代码。 然后,我使用相同的 Flask venv 激活
source venv1/bin/activate
并使用运行脚本
python z.py
我又遇到了同样的错误。 但是如果我以 sudo 身份运行上述命令
sudo python z.py
然后脚本执行得很好,我得到了以下响应
87.0999984741211 29.399999618530273
那么,现在问题来了,我如何在具有 sudo 权限的 Flask 应用程序中使用Adafruit_DHT
包?
我不认为将777
设置为www-data
组是正确的选择。 或者以sudo
用户身份运行 Flask 应用程序将是一个好主意。
我已经尝试使用sudo
全局安装Adafruit_DHT
包,但我仍然必须将z.py
作为sudo
执行
那么这样做的正确方法是什么?
我相信该软件包将尝试访问设备 /dev/gpiomem(可能(/dev/gpiochip0 或 /dev/gpiochip1)。
我认为解决这个问题的最巧妙方法是让这些设备归 root 以外的组所有,并授予该组访问设备的权限,例如
sudo su
groupadd gpio
chgrp gpio /dev/gpio*
chmod g+rw /dev/gpio*
然后我会继续将您的用户添加到该组(默认情况下这是 ubuntu,但您可能已经创建了另一个用户):
usermod -a -G gpio ubuntu
现在您已经创建了一个名为“gpio”的组,该组现在有权访问您的 Pi 的 GPIO,并将您的用户添加到该组。
请注意,我没有测试过这个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.