Je veux écrire du contenu dans un fichier avec Python. L'emplacement du fichier est dans le chemin du répertoire racine: ci-dessous sont les autorisations de fichier p> Je veux mettre à jour ce fichier , et il ne peut être mis à jour que avec mais je reçois la permission refusé l'erreur: p> IOERROR: [ERGNO 13] Autorisation refusée: U '/ etc / hosts' p>
blockquote> J'ai également essayé avec sous-processus: p> mais cela n'a pas encore fonctionné. P> Comment puis-je résoudre ce problème? p> p> / etc / hosts code>
3 Réponses :
Vérifiez / etc / hosts forge> autorisation de dossier ou
Cela a été donné dans la question. Et cela devrait être un commentaire si vous ne l'avez pas vu
J'ai besoin de la permission de sudo pour écrire ce dossier c'est pourquoi j'ai ajouté OS.System ('Echo% S | Sudo -s Python% S'% S '% ("ROOT", FW.WRITE (B)))
Votre script informatique peut revenir à Sudo s'il n'a pas de privilège. Le module PEXPPECT est nécessaire.
Par exemple: P>
import os import pexpect import sys import argparse def get_args(): parser = argparse.ArgumentParser(description="Run as sudo!") parser.add_argument('-p', dest='privelege', action='store', help='also has rights') args = parser.parse_args() return vars(args) full_path = os.path.abspath(__file__) print("full_path = %s", full_path) if __name__ == '__main__': args = get_args() if args.get('privelege') == None: #check if it has sudo privelege and if not rerun with it. child = pexpect.spawn("sh", logfile = sys.stdout) child.sendline("sudo python %s -p root" % full_path) child.expect("assword", timeout = 100) child.logfile = None child.sendline("YOUR_PASSWORD") child.logfile_read = sys.stdout elif args.get('privelege') == 'root': #if it have root privelege do action path = "/etc/hosts" fr = open(path,'r') b = fr.read() b = b+'something to write' fr.close() fw = open(path,'w') fw.write(b) fw.close()
La solution suivante a fonctionné pour moi enfin. J'ai créé un nouveau fichier appelé etedit.py code> qui écrira sur le fichier.
import os, subprocess
import sys
from sys import argv
def etc_update(host_name, *args):
path = "/etc/hosts"
host_name = host_name[0]
fw = open(path,'w')
fw.write(host_name)
etc_update(sys.argv[1:])
Vous devez exécuter le script Python avec sudo comme
sudo python myscript.py code>
Vous obtenez déjà l'erreur d'autorisation lorsque vous essayez de lire.
Mon code entier est dans le même fichier et je n'exègre pas cela avec le terminal :)
@Dschoni Aucune lecture de fichier n'est effectuée avec succès mais ne pas écrire.