Come posso chiamare una finestra di dialogo per l'autenticazione?


13

Sto scrivendo un programma gui usando il modulo wx in python. Nel programma ogni volta che accedo a una cartella che richiede il privilegio di root, allora chiede la password al terminale, ma voglio mostrare all'utente la finestra di dialogo per inserire la password e autenticarlo. Come chiamare quella finestra di dialogo e autenticare l'utente in Ubuntu?


Scrivi che "chiede password al terminale" significa che stai chiamando i comandi sudo terminal da Python?
TLE

Penso che probabilmente dovresti usare PolicyKit piuttosto che sudo, ma non ho abbastanza conoscenza di Python o PolicyKit per scrivere una buona risposta spiegando come. Forse qualcun altro può.
Eliah Kagan,

Come hai intenzione di usarlo? eseguendo solo un comando
daisy,

Risposte:


9

Ci sono due diverse domande e risposte su stackoverflow che rispondono alla tua domanda: qui e qui .

Entrambe le risposte usano il comando gksudo(già citato da @khamer). Se esegui gksudo command(anche senza Python) praticamente farà quello che sudofa, ma con un'interfaccia grafica - cioè chiedi all'utente una password e quindi esegui il comando come root se l'utente si trova nel file sudoers.

Per implementare la soluzione suggerita dalle risposte collegate in Python, puoi usare qualcosa come mostrato dal seguente esempio:

Crea un file run.py:

#!/usr/bin/python

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

E un file create.py:

#!/usr/bin/python

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

Quindi esegui python run.pye dopo aver inserito la password verrà creato un file di proprietà di root. Se lo esegui python create.pysarà di tua proprietà (il file non dovrebbe esistere prima di eseguire lo script).


3

Mentre sono sicuro che esista una soluzione Python più elaborata, la versione down e dirty è usare gksudo. gksudo fa la stessa cosa che sudo fa, tranne per il fatto che crea quella finestra di dialogo per l'autenticazione menzionata invece di chiedere sulla riga di comando.

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


Dato che questa è una domanda sulla programmazione per Ubuntu in Python, puoi dare un esempio di codice che mostra come usare gksu/ gksudoin un programma Python?
Eliah Kagan,

@EliahKagan Ho scritto una risposta con un esempio che si spera soddisfi le tue richieste! :)
lumbric

0

Inserisci questo script nel tuo codice:

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))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.