如何调用身份验证对话框?


13

我正在使用python中的wx模块编写gui程序。在程序中,只要我访问需要root特权的文件夹,它就会在终端询问密码,但是我想显示对话框以供用户输入密码并对其进行身份验证。如何调用该对话框并在ubuntu中对用户进行身份验证?


您将其写为“在终端询问密码”是否表示您正在从python调用sudo终端命令?
TLE 2012年

我认为您可能应该使用PolicyKit而不是sudo,但是我对Python或PolicyKit的了解不足,无法写出一个很好的答案来解释如何做。也许别人可以。
伊利亚·卡根

您将如何使用它?只是执行命令
雏菊2012年

Answers:


9

在stackoverflow上有两种不同的Q&A回答您的问题:herehere

这两个答案都使用命令gksudo(@khamer已经提到过)。如果您运行gksudo command(也没有python),则基本上可以执行此sudo操作,但是会使用图形界面-即,要求用户输入密码,然后如果用户在sudoers文件中,则以root用户身份运行命令。

要从python中的链接答案中实现建议的解决方案,可以使用以下示例所示的内容:

创建一个文件run.py

#!/usr/bin/python

import subprocess
subprocess.call(['gksudo','python create.py'])

和一个文件create.py

#!/usr/bin/python

# Create test file..
f = file("mytestfile", "w")

然后运行python run.py,输入密码后,将创建root拥有的文件。如果运行python create.py,它将归您所有(运行脚本之前,该文件不应存在)。


3

虽然我确定有一个更高级的python解决方案,但肮脏的版本是使用gksudo。gksudo的功能与sudo相同,除了它会创建您提到的身份验证对话框而不是在命令行中询问。

参见https://help.ubuntu.com/community/RootSudo#Graphical_sudo


由于这是有关使用Python进行Ubuntu编程的问题,您能否举一个代码示例来说明如何在Python程序中使用gksu/ gksudo
伊利亚·卡根

@EliahKagan我写了一个例子,希望可以满足您的要求!:)
lumbric

0

将此脚本插入您的代码中:

import os

Password = raw_input('Please enter your root password!')

sudo_command = '<your command>'

execute = os.system('echo %s|sudo -S %s' % (Password, sudo_command))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.