如何在 Flask 中使用具有 sudo 权限的 python 包?
How to use a python package with sudo privileges inside Flask?
我通过 this 教程在我的 Raspberry Pi 4 模型 B 中设置了 Flask。
OS = Ubuntu 服务器 20.04.2 LTS
Python = 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
组不是正确的选择。或者 运行将 Flask 应用程序作为 sudo
用户是个好主意。
我已经尝试使用 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,并将您的用户添加到该组。
请注意,我还没有测试过这个
我通过 this 教程在我的 Raspberry Pi 4 模型 B 中设置了 Flask。
OS = Ubuntu 服务器 20.04.2 LTS
Python = 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
并在其中编写了上面的代码。然后,我使用
source venv1/bin/activate
并且运行脚本使用
python z.py
我又遇到了同样的错误。但是如果我 运行 上面的命令是 sudo
sudo python z.py
然后脚本执行得非常好,我得到了以下响应
87.0999984741211 29.399999618530273
那么,现在问题来了,如何在具有 sudo 权限的 Flask 应用程序中使用 Adafruit_DHT
包?
我认为将 777
设置为 www-data
组不是正确的选择。或者 运行将 Flask 应用程序作为 sudo
用户是个好主意。
我已经尝试使用 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,并将您的用户添加到该组。
请注意,我还没有测试过这个