【问题标题】:from an external python script call a python function which require root previlege(pynq library) is continuously crashed从外部python脚本调用需要root权限的python函数(pynq库)不断崩溃
【发布时间】:2020-12-21 10:12:39
【问题描述】:

我必须从 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/ 两个文件都在同一个文件夹中。我已经用sudo python3 child.py 运行了那个 child.py 并且它可以工作。由sudo python3 app.py 执行 Flask 代码。我的猜测是 app.pysudo 运行,因此它将使用具有 root 权限的所有其他依赖项。但我失败了。它执行,但过了一会儿它崩溃了。

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

【问题讨论】:

    标签: python-3.x flask root sudo


    【解决方案1】:

    据我所知,当您向可执行文件(您的 python 脚本)授予管理员权限(root)时。 无论可执行文件做什么都具有管理员权限。 尝试使用 root 帐户本身或sudo -u root --login "python3 app.py" 调用它,看看它是否有效

    还说它不起作用也无济于事。如果你有追溯。添加它以帮助我们回答您或任何其他有帮助的信息。我不能像这样帮助你

    编辑后user10634362 下方评论

    【讨论】:

    • 您需要在控制台中显示错误吗?如果,我会添加它。但是,我使用了您的建议但失败了。 sudo -i root python3 app.pysudo -i root "python3 app.py" 在这两种情况下我都有-bash: root: command not found
    • 对不起,我在 sudo 命令中打错了。我已经很长时间没有使用 sudo (现在使用 root 帐户运行)。我的意思是当您致电sudo python3 app.py 时收到的回溯信息。这将有很大帮助
    • 编辑了答案:使用sudo -u root --login "python3 app.py"。在 cmets 中留下任何回溯或错误
    • 问题出在另一个地方。更改了标题并给出了解决方法作为答案。
    【解决方案2】:

    我找到了解决办法。首先,我正在更改问题标题,因为在得到解决方案后,我理解当前标题不适合这种情况。尽管赋予 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 函数,它解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多