L'exécution d'un script python en tant que root

J'ai le script suivant:

#!/usr/bin/env python                                                           

import sys                                                                      
import pyttsx                                                                   

def main():                                                                     
        print 'running speech-text.py...'                                       
        engine = pyttsx.init()                                                  
        str = "Hi..."                                    
        if len(sys.argv) > 1:                                                   
                str = sys.argv[1]                                               
        engine.say(str)                                                         
        engine.runAndWait()                                                     

if __name__ == '__main__':                                                      
        main() 

et je l'ai placé dans /usr/bin/speech-test.py

J'ai également donné exécutable autorisations et la propriété de la racine:

sudo chown root:root /usr/bin/speech-test.py
sudo chmod 4755 /usr/bin/speech-test.py

Cependant, ce script ne s'exécute correctement si je exécuter en tant qu' sudo speec-test.py. Si j'essaie de le lancer en tant que juste speech-test.py il se plaint de ne pas trouver un tas de ALSA lib fichiers.

Me manque quelque chose pour avoir mon script de s'exécuter avec les privilèges de root?

Le problème peut être avec env dans hashbang, mais j'ai besoin de le tester. Vous l'appelez comme ./speech-test.py, pas par python speech-test.py? Parce que plus tard, exécuter python encore avec des droits d'utilisateur.
juste speech-test.py no ./
Vous ne pouvez pas SUID scripts sous linux. Si vous en avez besoin, écrire un fichier binaire lanceur ou de l'utilisation nopasswd sudo. Rien exécutable qui commence avec une hashbang est un script.
TIL: stackoverflow.com/questions/18698976/... + faqs.org/faqs/unix-faq/faq/part4/section-7.html Merci @x3al
Si vous ne souhaitez pas utiliser nopasswd sudo ensuite, vous pouvez créer un fichier binaire exécutable à partir d'un script Python en utilisant quelque chose comme cx_Freeze.

OriginalL'auteur moesef | 2014-03-22