web-dev-qa-db-fra.com

Comment appeler un dialogue pour l'authentification?

J'écris un programme en utilisant le module wx en python. Dans le programme, chaque fois que j'accède à un dossier qui requiert un privilège root, il demande le mot de passe du terminal, mais je souhaite afficher la boîte de dialogue à l'utilisateur pour qu'il entre le mot de passe et s'authentifie. Comment appeler cette boîte de dialogue et authentifier l'utilisateur dans Ubuntu?

13
rupali

Stackoverflow répond à deux questions différentes: ici et ici .

Les deux réponses utilisent la commande gksudo (déjà mentionnée par @khamer). Si vous exécutez gksudo command (également sans python), il fera essentiellement ce que Sudo fait, mais avec une interface graphique - c.-à-d. Demandez à l'utilisateur un mot de passe, puis exécutez la commande en tant que root si l'utilisateur est présent. le fichier sudoers.

Pour implémenter la solution suggérée à partir des réponses liées en python, vous pouvez utiliser quelque chose comme le montre l'exemple suivant:

Créez un fichier run.py:

#!/usr/bin/python

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

Et un fichier create.py:

#!/usr/bin/python

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

Ensuite, lancez python run.py et, après avoir entré votre mot de passe, un fichier appartenant à root sera créé. Si vous exécutez python create.py, il vous appartiendra (le fichier ne doit pas exister avant l'exécution du script).

9
lumbric

Bien que je sois sûr qu'il existe une solution plus sophistiquée python, la version la plus basse et la plus sale consiste à utiliser gksudo. gksudo fait la même chose que Sudo, à la différence qu'il crée cette boîte de dialogue pour l'authentification que vous avez mentionnée au lieu de demander en ligne de commande.

Voir https://help.ubuntu.com/community/RootSudo#Graphical_Sudo

3
khamer

Insérez ce script dans votre code:

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))
0
upapilot