首页 > 解决方案 > 从外部python脚本调用需要root权限的python函数(pynq库)不断崩溃

问题描述

我必须从 python 函数中获取连续数据,它的库之一(Overlay)取决于 root 权限。我必须使用 Flask 运行该 python 函数。

首先,我搜索了如何授予对 python 脚本的 root 访问权限,但不幸的是,我没有找到任何模仿我的案例的方法。

我采用的方法—— 1/ 包含Overlay库的
Python 文件假设名称是child.py,其中包含一个函数名status_data

from pynq import PL
from pynq import Overlay
def main_path():
    ol = Overlay("/home/xilinx/pynq/overlays/design_4/design_1_wrapper.bit")
    return ol

def status_data():
    ol = main_path()
    data = '''my_code'''
    return data

2/ Flask 文件名是app.py,我需要通过端点获取连续数据

from create_json_data import status_data
from flask import Flask, render_template
from flask import jsonify
'''mayn others lib, doesn't include'''

'''my_code'''
@app.route("/auto_update_table")
def parse_auto_update_table(name=None):
    data_json = status_data()
    return jsonify(data_json)

3/ 两个文件都在同一个文件夹中。我已经运行了那个child.py并且sudo python3 child.py它可以工作。执行 Flask 代码sudo python3 app.py。我的猜测是随着app.py 的运行,sudo它会使用具有 root 权限的所有其他依赖项。但我失败了。它执行,但过了一会儿它崩溃了。

是否有任何解决方法可以从app.py以 root 权限调用child.py文件的函数而不会崩溃?安全不是问题,因此我可以向任何脚本文件透露我的凭据,如果还需要,我可以手动输入密码,但只能手动输入一次,因为它是一个连续过程,因此一遍又一遍地输入密码并不是一个切实可行的解决方案。status_data

标签: python-3.xflaskrootsudo

解决方案


我找到了解决方案。首先,我正在更改问题标题,因为在得到解决方案后,我理解当前标题不适合这种情况。尽管授予root 权限非常容易。sudo python3 app.py做这项工作。主要缺陷在于

from pynq import Overlay

def main_path():
    ol = Overlay("/home/xilinx/pynq/overlays/design_4/design_1_wrapper.bit")
    return ol

我已经main_path反复调用了这个函数,但是它需要大量的延迟并且它在那里不存在。所以我遇到了意外的崩溃。在声明
ol = Overlay("/home/xilinx/pynq/overlays/design_4/design_1_wrapper.bit")
我已经ol作为全局变量传递给status_data函数之后,它解决了这个问题。


推荐阅读