Existem algumas soluções que colocam a senha automaticamente, mas como elas são visíveis em texto não criptografado por um momento, elas são perigosas e você não deve usá-las. Alguns métodos são discutidos aqui .
Esta é a maneira correta de executar um programa python como root:
import os
import sys
import subprocess
def main():
status, output = subprocess.getstatusoutput("apt-get update")
return status
if __name__ == '__main__':
if os.getuid():
print("This program needs to be run with root privileges,")
print("please use 'sudo ./{0}' to execute it".format(*sys.argv))
sys.exit(100)
else:
sys.exit(main())
E o método de texto claro:
This is dangerous Your password will be visible to users on the system in the clear Be advised, passwords should never be stored anywhere, ever.
password = "password1"
subprocess.getstatusoutput(
"echo {} | sudo -S apt-get update".format(password))
Em uma nota relacionada, a melhor maneira de solicitar uma senha ao usuário é usando o getpass:
import getpass
password = getpass.getpass(prompt='Password: ')
Isso não imprimirá a senha como na tela enquanto o usuário estiver digitando, como seria de se esperar em um sistema Linux.
import os
import sys
import subprocess
def main():
print("hello world, we're root!")
return 0
if __name__ == '__main__':
if os.getuid():
os.system("sudo python3 " + ' '.join(sys.argv))
sys.exit(100)
else:
sys.exit(main())
Esta solução, em vez de perguntar ao usuário, é executada como raiz, se necessário.