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?
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).
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
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))