Como chamo uma caixa de diálogo para autenticação?

13

Estou escrevendo um programa GUI usando o módulo wx em python. No programa, sempre que estou acessando uma pasta que requer privilégios de root, ele solicita a senha no terminal, mas quero exibir a caixa de diálogo ao usuário para inserir a senha e autenticá-lo. Como chamar essa caixa de diálogo e autenticar o usuário no ubuntu?

rupali
fonte
Você escreve que "pede a senha no terminal" significa que você está chamando os comandos sudo terminal do python?
TLE
Eu acho que é provável que você deva usar o PolicyKit sudo, mas não tenho conhecimento suficiente de Python ou PolicyKit para escrever uma boa resposta explicando como. Talvez alguém possa.
Eliah Kagan
Como você vai usar isso? apenas executando um comando
daisy

Respostas:

9

Existem duas perguntas e respostas diferentes no stackoverflow, respondendo à sua pergunta: aqui e aqui .

Ambas as respostas usam o comando gksudo(já mencionado por @khamer). Se você executar gksudo command(também sem python), ele basicamente fará o que sudofaz, mas com uma interface gráfica - ou seja, solicite uma senha ao usuário e execute o comando como root se o usuário estiver no arquivo sudoers.

Para implementar a solução sugerida a partir das respostas vinculadas no python, você pode usar algo como mostrado no exemplo a seguir:

Crie um arquivo run.py:

#!/usr/bin/python

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

E um arquivo create.py:

#!/usr/bin/python

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

Em seguida, execute python run.pye depois de digitar sua senha, um arquivo pertencente ao root será criado. Se você executar, python create.pyele será de sua propriedade (o arquivo não deverá existir antes da execução do script).

lumbric
fonte
3

Embora tenha certeza de que há uma solução python mais sofisticada, a versão para baixo e suja é usar gksudo. O gksudo faz o mesmo que o sudo, exceto que ele cria o diálogo para autenticação que você mencionou, em vez de perguntar na linha de comando.

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

Khamer
fonte
Como essa é uma pergunta sobre a programação do Ubuntu no Python, você pode dar um exemplo de código mostrando como usar gksu/ gksudoem um programa Python?
Eliah Kagan
@EliahKagan Eu escrevi uma resposta com um exemplo que, esperançosamente, atende às suas demandas! :)
lumbric
0

Insira este script no seu código:

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
fonte