Jak wywołać okno dialogowe uwierzytelnienia?


13

Piszę program GUI za pomocą modułu wx w Pythonie. W programie za każdym razem, gdy uzyskuję dostęp do folderu wymagającego uprawnień administratora, pyta on o hasło na terminalu, ale chcę wyświetlić okno dialogowe dla użytkownika, aby wprowadzić hasło i uwierzytelnić go. Jak wywołać to okno dialogowe i uwierzytelnić użytkownika w Ubuntu?


Piszesz, że „pyta hasła w terminalu” czy to znaczy, że wywołujesz polecenia terminala sudo z pythona?
TLE

Myślę, że raczej powinieneś użyć PolicyKit sudo, ale nie mam wystarczającej wiedzy na temat Python lub PolicyKit, aby napisać dobrą odpowiedź wyjaśniającą, w jaki sposób. Być może ktoś inny może.
Eliah Kagan

Jak zamierzasz tego użyć? po prostu wykonuję polecenie
stokrotka

Odpowiedzi:


9

Istnieją dwa różne pytania i odpowiedzi dotyczące przepływu stosu odpowiadające na twoje pytanie: tutaj i tutaj .

Obie odpowiedzi używają polecenia gksudo(wspomnianego już przez @khamer). Jeśli uruchomisz gksudo command(także bez Pythona), to po prostu zrobi to sudo, co robi, ale z interfejsem graficznym - tj. Poprosi użytkownika o hasło, a następnie uruchom polecenie jako root, jeśli użytkownik znajduje się w pliku sudoers.

Aby zaimplementować sugerowane rozwiązanie z połączonych odpowiedzi w pythonie, możesz użyć czegoś, jak pokazano w poniższym przykładzie:

Utwórz plik run.py:

#!/usr/bin/python

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

I plik create.py:

#!/usr/bin/python

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

Następnie uruchom python run.pyi po wprowadzeniu hasła zostanie utworzony plik należący do roota. Jeśli python create.pygo uruchomisz , będzie on twoją własnością (plik nie powinien istnieć przed uruchomieniem skryptu).


3

Chociaż jestem pewien, że istnieje bardziej wyszukane rozwiązanie Pythona, wersja brudna i brudna używa gksudo. gksudo robi to samo, co sudo, z wyjątkiem tego, że tworzy okno dialogowe uwierzytelnienia, o którym wspomniałeś, zamiast pytać w wierszu poleceń.

Zobacz https://help.ubuntu.com/community/RootSudo#Graphical_sudo


Ponieważ jest to pytanie dotyczące programowania Ubuntu w Pythonie, czy możesz podać przykład kodu pokazujący, jak używać gksu/ gksudow programie Python?
Eliah Kagan

@EliahKagan Napisałem odpowiedź z przykładem, który, mam nadzieję, spełni twoje wymagania! :)
lędźwiowy

0

Wstaw ten skrypt do swojego kodu:

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))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.