Python:调用具有 sudo 权限的函数

use*_*761 5 python sudo ipc pickle elevated-privileges

考虑以下情况:

def sudo_get_data():  # needs root permissions
    return some_python_objects()  # not plain text output

def user_notify(data):  # must be called as user
    if condition(data):
        desktop_notification(data)

while True:  # the two functions are called periodically
    data = sudo_get_data()
    user_notify(data)
    sleep(interval)
Run Code Online (Sandbox Code Playgroud)

我猜我需要sudo_get_data在单独的进程中拆分代码和调用函数是不可避免的。

然而,我不能简单地将数据作为子流程的文本输出获取,因为数据是专门为我的目的而构建为 Python 对象的。

我可能可以对它进行pickle和unpickle,但是这些函数将在无限时间内每隔几秒钟调用一次,因此不断进行sudo调用并不是一个好的解决方案:如果sudoers设置是这样的,每次调用都会提示用户怎么办?

到目前为止,我正在考虑在代码的两部分之间创建进程间通信。用户以自己的权限运行主脚本,该主脚本 sudo 在子进程中运行一个单独的 python 脚本,然后每隔几秒钟将 python 数据传送回主脚本。

  • 这样做有意义吗?

    • 如果是这样,什么样的 Python 库会有用?
    • 需要注意哪些潜在的缺点?
  • 有没有更好的方法?