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


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.