Як викликати діалогове вікно для аутентифікації?


13

Я пишу програму gui, використовуючи модуль wx в python. У програмі кожен раз, коли я отримую доступ до папки, яка вимагає root права, тоді вона запитує пароль у терміналі, але я хочу показати користувачеві діалогове вікно, щоб ввести пароль та підтвердити його автентифікацію. Як викликати це діалогове вікно та автентифікувати користувача в 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

Хоча я впевнений, що є більш прихильне рішення пітона, внизу і брудною версією є використання 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.