在某些时候,我的应用程序需要执行管理任务,例如在/ etc中创建文件或以root特权运行命令。
我知道可以做一个问答:
os.popen("pkexec foo bar")
但是我也知道,这不是可以预见的干净方法。由于用户总是需要重新输入密码而不是像会话一样进行处理,因此会给用户带来某种烦恼。
当我找到用于身份验证的python示例时,我感到非常乐观。
这是一个直接起作用的简单示例:
import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')
system_bus_name = bus.get_unique_name()
subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1 # AllowUserInteraction flag
cancellation_id = '' # No cancellation id
result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)
print result
我一直很天真地认为,授权后我可以使用一些os.popen()-commands在脚本中继续操作。现在我更好了:(
我可以在上面的示例中看到元组结果,但是在进一步的文档中,我现在找不到要执行的代码。
我与这个结果有什么关系?如何继续执行我需要的任务?是否有提供可用方法的示例的python参考?
我试图使用dir()列出授权方法,但找不到任何线索进行下去。
我真的很想避免使用我的后备,但这将是我的最后选择。请帮助我以正确的方式来做:)
感谢致敬
安德烈
编辑:
由于我没有启用它,并且以前的解决方案(通过使用gksu启动我的程序)在/ opt /中不起作用,因此我最终不得不放弃并实施了上千个要求输入密码的程序,才能使该程序成为基本工作,至少应用程式摊牌中的T恤。
我没有注意到这个问题,因为我首先进行了快速分享。那里一切正常。一开始要求输入密码。我现在很沮丧。我对AppShowdown的贡献是https://launchpad.net/armorforge。;-(