Python 如何获取我的应用程序的根预任务?

Python 如何获取我的应用程序的根预任务?,python,linux,dbus,Python,Linux,Dbus,我的应用程序需要做一些特权工作。我到处找了,但找不到有用的东西。我知道我想使用Policykit1和dbus,因为我发现的所有其他替代方案都不再使用了 这是我到目前为止得到的代码: import dbus import os bus = dbus.SystemBus() proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority') authority = dbus.In

我的应用程序需要做一些特权工作。我到处找了,但找不到有用的东西。我知道我想使用Policykit1和dbus,因为我发现的所有其他替代方案都不再使用了

这是我到目前为止得到的代码:

import dbus
import os

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 i


result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

os.makedirs('/usr/local/share/somefolder')

我无法创建目录,我做错了什么?

文件系统安全性正在阻止您,因为您的用户没有
/usr/local/share/somefolder
的写入权限。您可以使用
sudo
临时升级该目录创建的权限。但如果您需要以超级用户的身份执行更多操作,它并不会就此停止


如果您需要写入不在用户空间中的内容,那么整个程序可能比以root身份运行(当然是在sudo下)更好,例如
sudo./myscript.py

整个要点是通过使用dbus和policykit作为获取特权的手段来避免使用类似“sudo./myscript.py”的内容。到目前为止,这行代码:result=authority.CheckAuthorization(主题、操作id、详细信息、标志、取消id)可以请求身份验证,但即使我完美地输入了根密码,应用程序的权限也不会提高。如果您想通过调用PolicyKit D-Bus方法来提高权限(这是不可能的),这与在
sudo
下运行没有区别,因为用户必须信任您的整个应用程序。PolicyKit只允许调用特权系统服务的预配置方法。您是否考虑过使用
gksudo
并仅使用执行
gksudo myscript.py
的简单bash脚本打包应用程序?这当然是一个简单的解决办法。