Как мне вызвать диалог для аутентификации?


13

Я пишу программу с графическим интерфейсом, используя модуль wx в Python. В программе всякий раз, когда я обращаюсь к папке, для которой требуются права суперпользователя, он запрашивает пароль на терминале, но я хочу отобразить диалоговое окно для пользователя, чтобы ввести пароль и аутентифицировать его. Как вызвать этот диалог и аутентифицировать пользователя в Ubuntu?


Вы пишете, что он «запрашивает пароль в терминале», означает ли это, что вы вызываете команды терминала sudo из python?
TLE

Я думаю, что вы, скорее всего, должны использовать PolicyKit, а не sudo, но у меня недостаточно знаний Python или PolicyKit, чтобы написать хороший ответ, объясняющий как. Возможно, кто-то еще может.
Элия ​​Каган

Как вы собираетесь использовать это? просто выполняю команду
маргаритка

Ответы:


9

Есть два разных вопроса и ответов в stackoverflow, отвечающих на ваш вопрос: здесь и здесь .

Оба ответа используют команду gksudo(уже упоминавшуюся @khamer). Если вы запустите gksudo command(также без python), он будет делать то sudo, что делает, но с графическим интерфейсом - то есть попросить пользователя ввести пароль, а затем выполнить команду от имени пользователя root, если пользователь находится в файле sudoers.

Чтобы реализовать предложенное решение из связанных ответов в 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.


Поскольку это вопрос программирования для Ubuntu на Python, можете ли вы привести пример кода, показывающий, как использовать gksu/ gksudoв программе на Python?
Элия ​​Каган

@EliahKagan Я написал ответ с примером, который, надеюсь, отвечает вашим требованиям! :)
поясничный

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))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.