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?

rupali
źródło
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).

lędźwiowy
źródło
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

khamer
źródło
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))
upapilot
źródło