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 数据传送回主脚本。
这样做有意义吗?
有没有更好的方法?