Из внешнего скрипта python вызов функции python, для которой требуется root previlege (библиотека pynq), постоянно аварийно завершается

Мне нужно получать непрерывные данные из функции Python, и одна из ее библиотек (Overlay) зависит от привилегий root. Мне нужно запустить эту функцию Python с помощью Flask.

Прежде всего, я искал, как предоставить root-доступ к скрипту Python, но, к сожалению, я не нашел ничего, что имитировало бы мой случай.

Подход, который я выбрал --
1/ Файл Python, содержащий библиотеку Overlay, предположим, что это имя 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. Но я потерпел неудачу. Он выполняется, но через некоторое время падает.

Есть ли обходной путь для вызова функции status_data файла child.py с привилегиями root из app.py без сбоя? Безопасность не является проблемой, поэтому я могу раскрыть свои учетные данные для любого файла сценария, а если также потребуется, я могу указать пароль вручную, но только один раз, поскольку это непрерывный процесс, поэтому многократный ввод пароля не является реальным решением.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
114
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Насколько я знаю, когда вы даете разрешение администратора (root) на исполняемый файл (ваш скрипт python). Все, что делает исполняемый файл, выполняется с правами администратора. Попробуйте вызвать его с помощью самой учетной записи root или sudo -u root --login "python3 app.py", чтобы увидеть, работает это или нет.

Также говорить, что это не работает, не помогает. Если у вас есть след. Добавьте его, чтобы помочь нам ответить вам или любую другую информацию, которая поможет. Я не могу помочь тебе вот так

ОТРЕДАКТИРОВАНО ПОСЛЕ user10634362 КОММЕНТАРИЙ НИЖЕ

Вам нужно, чтобы ошибка отображалась в консоли? Если ДА, то добавлю. Однако я воспользовался вашим предложением, но потерпел неудачу. sudo -i root python3 app.py и sudo -i root "python3 app.py" в обоих случаях у меня есть -bash: root: command not found.

user10634362 21.12.2020 11:37

Извините, я сделал опечатку в команде sudo. Я довольно давно не работал с sudo (теперь работает с учетной записью root). Я имел в виду обратную связь, которую вы получаете, когда звоните sudo python3 app.py. Это очень поможет

000Zer000 21.12.2020 18:05

Отредактировал ответ: используйте sudo -u root --login "python3 app.py". Оставьте любой след или ошибку здесь, в комментариях

000Zer000 22.12.2020 12:23

Проблема в другом моменте. Изменил заголовок и дал обходной путь в качестве ответа.

user10634362 06.01.2021 16:24
Ответ принят как подходящий

Я нашел решение. Прежде всего, я меняю название вопроса, так как после получения решения я понял, что нынешнее название не соответствует ситуации. Хотя дать привилегии 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, и это решает проблему.

Другие вопросы по теме