Wie rufe ich einen Dialog zur Authentifizierung auf?


13

Ich schreibe ein GUI-Programm mit WX-Modul in Python. Wenn ich in einem Programm auf einen Ordner zugreife, für den Root-Rechte erforderlich sind, wird am Terminal ein Kennwort abgefragt, aber ich möchte dem Benutzer den Dialog anzeigen, in dem er das Kennwort eingeben und ihn authentifizieren kann. Wie rufe ich diesen Dialog auf und authentifiziere den Benutzer in Ubuntu?


Sie schreiben, dass es "fragt Passwort am Terminal" bedeutet, dass Sie Sudo-Terminal-Befehle aus Python aufrufen?
TLE

Ich halte es für wahrscheinlich, dass Sie PolicyKit anstelle von verwenden sollten sudo, aber ich habe nicht genügend Kenntnisse über Python oder PolicyKit, um eine gute Antwort zu schreiben, in der erläutert wird, wie. Vielleicht kann jemand anderes.
Eliah Kagan

Wie wirst du das nutzen? führe gerade einen befehl aus
daisy

Antworten:


9

Es gibt zwei verschiedene Fragen und Antworten bei stackoverflow, die Ihre Frage beantworten: hier und hier .

Beide Antworten verwenden den Befehl gksudo(bereits von @khamer erwähnt). Wenn Sie es ausführen gksudo command(auch ohne Python), wird es im Grunde genommen das tun, was es sudotut, aber mit einer grafischen Oberfläche - dh fragen Sie den Benutzer nach einem Kennwort und führen Sie den Befehl als root aus, wenn sich der Benutzer in der sudoers-Datei befindet.

Um die vorgeschlagene Lösung aus den verknüpften Antworten in Python zu implementieren, können Sie Folgendes verwenden:

Erstellen Sie eine Datei run.py:

#!/usr/bin/python

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

Und eine Datei create.py:

#!/usr/bin/python

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

Führen python run.pySie dann aus, und nachdem Sie Ihr Kennwort eingegeben haben, wird eine Datei im Besitz von root erstellt. Wenn Sie es ausführen, gehört python create.pyes Ihnen (die Datei sollte vor dem Ausführen des Skripts nicht vorhanden sein).


3

Während ich sicher bin, dass es eine schickere Python-Lösung gibt, besteht die Down- und Dirty-Version darin, gksudo zu verwenden. gksudo macht dasselbe wie sudo, außer dass es das von Ihnen erwähnte Dialogfeld für die Authentifizierung erstellt, anstatt in der Befehlszeile nachzufragen.

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


Da dies eine Frage zur Programmierung für Ubuntu in Python ist, können Sie ein Codebeispiel geben, das zeigt, wie gksu/ gksudoin einem Python-Programm verwendet wird?
Eliah Kagan

@EliahKagan Ich habe eine Antwort mit einem Beispiel geschrieben, das hoffentlich Ihren Anforderungen entspricht! :)
lumbric

0

Fügen Sie dieses Skript in Ihren Code ein:

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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.