1

我正在编写一个 python3 应用程序,以用户身份使用 GUI(不在终端中)运行。当这个应用程序以用户身份运行时,我还需要执行一个需要 root 权限的命令。我已经看到很多关于如何在终端中执行此操作的示例,例如这个,它实际上在终端中运行良好:

import subprocess
subprocess.call('sudo echo "Hello world!"', shell=True)

...但是我的 python 应用程序没有在终端中运行,并且当我的 GUI 代码调用它时,这种方法似乎不会自动引发可见的系统提示。

其他应用程序,尤其是 Snap Store,在需要以 root 权限执行某些操作时,会以某种方式启动看似系统弹出窗口。例如,当我使用 Snap Store 在 Ubuntu 上安装 Notepad++ 时,我得到了这个弹出窗口,我怀疑这是一个系统弹出窗口,而不是 Snap Store 人员定制设计的。

Snap Store 提升权限弹出窗口

我对 Linux 系统不是很熟悉,但我认为这不是自定义弹出窗口而不是系统弹出窗口,因为谁愿意将他们的 root 密码提供给他们的某个应用程序的制造商?相反,用户会将其提供给系统(系统已经知道它),而第 3 方应用程序本身无法访问实际密码,但现在可以以 root 身份运行命令。

如何从我的 Python 应用程序启动相同的弹出窗口以运行需要 root 权限的命令?或者,我还能如何从以用户身份运行的 python GUI 运行 root 命令?

提前感谢您提供的任何明确的帮助!

4

1 回答 1

1

你试过pkexec吗?

不确定你的 GUI,但运行一个简单的 python 脚本(python3.8、pycharm、ubuntu 18.04)会导致你想要的弹出窗口(不能做弹出窗口的屏幕打印)。

import os

os.system("pkexec ls -l")
于 2020-03-18T14:37:40.463 回答