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

13

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

Rupali
источник
Вы пишете, что он «запрашивает пароль в терминале», означает ли это, что вы вызываете команды терминала 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его, он будет принадлежать вам (файл не должен существовать до запуска скрипта).

lumbric
источник
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))
upapilot
источник