OSError: [Errno 13] le refus d'une Autorisation de Python sous-processus.call()
Je suis en train de lancer un processus secondaire de python, mais je reçois un message d'erreur:
OSError: [Errno 13] le refus d'une Autorisation
cp2 = cp2.lstrip("~")
cp2 = wilixdirectory+"/Users/"+loggedusr+cp2
if cp3 == None:
subprocess.call([cp2])
else:
subprocess.call([cp2, cp3])
cp2 et cp3 sont les entrées de l'utilisateur pour les répertoires
wilixdirectory est un répertoire
loggedusr est une chaîne comme "Bob" ou "Joe"
Le code est en cours d'exécution hors de Unix
- Peux-tu montrer ton code? Et ce que l'environnement, c'est cette course, avec quelles autorisations?
- Le Code est dans la question
- Vérifier la valeur de
cp2
. Est-ce que vous attendez? Est-il manque un slash, ou faut-il avoir un où nul n'était censé être? Si le nom d'un fichier, vous avez l'autorisation d'accès au fichier? - vous pouvez utiliser
cp2 = os.path.expanduser(cp2)
au lieu decp2.lstrip("~"); cp2 = wilixdirectory+"/Users/"+loggedusr+cp2
Vous devez vous connecter pour publier un commentaire.
Au lieu de supposer que le chemin commence par une barre oblique, et la concaténation de l'aide
+
, utilisezos.path.join()
pour créer le chemin d'accès:Remarque que je bande
~
, et/
depuis le début decp2
de supprimer tout démarrage accidentel caractères à partir de la saisie de l'utilisateur, puis utilisezos.path.abspath()
pour s'assurer que le chemin est un chemin canonique, avec tout./
et../
entrées résolu. Vous ne devez vérifier que le résultat final est toujours à l'intérieur de la utilisateurs du répertoire et non à l'extérieur.Vous pouvez le tester avec
os.path.isfile()
pour voir si lecp2
chemin pointe effectivement vers un fichier avant d'exécutersubprocess.call()
.Solution:
Qui travaillent pour Linux, mais pour Unix:
pour Windows:
webbrowser.open(cp2)
fait la bonne chose dans votre cas.