如何,在Python PYGtk GUI中,只使用一次pkexec然后成为特定命令的根

时间:2015-07-20 12:30:49

标签: python user-interface subprocess pygtk sudo

我正在尝试用Python编写代码,使Apache停止并开始使用GUI应用程序。 一切正常,我的意思是我用subprocess.Popen执行命令(服务启动或服务停止)并调用pkexec作为第一个参数,以便提示用户启动或停止apache

问题是,每次用户点击启动或停止apache时都会运行pkexec,这很正常。 我想在第一次识别之后,用户将在我的应用程序中作为root用户,但他不是,我在pkexec命令之前和之后进行测试......

你认为我能找到另一种解决方案吗?我应该坚持使用密码对话框

1 个答案:

答案 0 :(得分:0)

我面临着与您相同的问题:我的python GTK应用程序需要以root用户身份运行命令,但是使用pkexec使其每次都要求输入root密码,这确实很烦人。

我看到两种解决该“问题”的方法:

1。使用pkexec

运行您的应用

该解决方案将更适合您的情况。

编写一个shell脚本,该脚本使用pkexec运行您的python应用程序。使用该解决方案,仅询问用户一次,您的应用程序将以root用户身份运行,因此不再需要使用pkexec,并且可以运行任何命令。

这样做的缺点是,您可能会期待一段时间后再次询问密码,以防万一未经授权的人可以访问计算机。

2。拆分您的应用

我的用例是一个安装程序,它通过下载,编译和安装软件来简化用户的生活。

先前的解决方案可以工作,但是我更喜欢让用户运行安装程序,并在实际点击“安装”按钮时要求输入密码。

然后解决方案是将应用分为两部分:

  • GUI
  • “引擎”或命令执行程序进程

在需要启动时,GUI会使用pkexec运行“引擎”(在您的情况下,只有在用户第一次单击“启动/停止”按钮),以便GUI以用户身份运行,“引擎”以root用户身份运行。

现在,您需要进行进程间通信,以便“引擎”可以向GUI报告,并且GUI可以将命令发送到“引擎”。为此,最好的选择是使用答案中所示的管道:https://stackoverflow.com/a/3806342/1996540

更新

我终于在this project中实现了建议的答案,因此您可以查看一个可行的示例。