繁体   English   中英

如何在 Flask 中使用具有 sudo 权限的 python 包?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM