python - 通知发送在使用 sudo 运行的 python 脚本中不起作用
问题描述
我正在编写一个使用 sudo 权限运行的 python 脚本。在某些时候,我想向用户发送通知。我注意到 notify-send 不能作为 root 用户工作,所以我尝试通过 do 以实际用户身份运行它su $SUDO_USER -c notify-send ...
,但这也不起作用。
以下第一个函数在没有 sudo 权限的情况下运行。使用 sudo 运行时,它们都不起作用。知道为什么吗?
def notify(message):
subprocess.run(['notify-send', '-i', 'utilities-terminal', 'Notification Title', message],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)
def notifySudo(message):
subprocess.run(['su', os.environ['SUDO_USER'], '-c', 'notify-send', '-i', 'utilities-terminal', 'Notification Title', message],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)
解决方案
所以经过一番研究,我找到了解决方案:
import os
def notify(title, message):
userID = subprocess.run(['id', '-u', os.environ['SUDO_USER']],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True).stdout.decode("utf-8").replace('\n', '')
subprocess.run(['sudo', '-u', os.environ['SUDO_USER'], 'DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{}/bus'.format(userID),
'notify-send', '-i', 'utilities-terminal', title, message],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)
推荐阅读
- wordpress - Wordpress 帖子循环分页 - 第一页返回 125 个帖子而不是 10 个,其余返回 10
- webpack - Laravel mix 4 生产构建抛出错误为 92%
- codeigniter - 搜索词 SEO 友好的 CodeIgniter 路由 url
- svelte - 如何从 Svelte 中的端点为组件创建动态页面?
- generics - 在 trait 对象中使用泛型类型参数的引用问题是什么?
- ios - 当我调用异步发布请求时如何发送正文中的值
- r - 在R中的方法中将对象转换为字符串
- javascript - 使用 Tampermonkey 到达最后一页时停止函数
- graphql - 什么是 GraphQL 中的标量类型
- model - 如何在 UIMA Ruta 中为外部分析引擎设置模型