J'ai un formulaire simple qui soumet une boîte de sélection. Lorsque le bouton d'envoi est activé, j'exécute un script python qui doit créer un nouveau répertoire et ajouter des fichiers à partir d'un référentiel. Actuellement, je ne peux pas obtenir que le script python puisse créer un répertoire.
Ajouter :
import cgitb
cgitb.enable()
à mon script m'a donné un
<type 'exceptions.OSError'>: [Errno 13] Permission denied: '../prPages/myNewFolderTest'
erreur.
Que dois-je rechercher/sur en ce qui concerne les autorisations de fichier sur le script, sur les dossiers dans lesquels je crée mes sous-dossiers? Que regarde-t-on lorsqu'un script python manipule des fichiers depuis un environnement de serveur?
Je suis d'accord avec la réponse de Stephen Ostermiller, mais j'aimerais ajouter un moyen simple de résoudre votre problème. Je suppose que vous utilisez Linux.
Je parie qu'il existe une fonction que vous pouvez appeler dans python pour obtenir le nom d'utilisateur actuel du script en cours d'exécution. Vous devez savoir ceci (ou au moins le groupe dans lequel se trouve l'utilisateur), sinon vous jouerez à un jeu de devinettes avec le serveur.
Un autre moyen d'obtenir le nom d'utilisateur consiste à demander à l'administrateur du serveur de se connecter à Shell en tant que root et de changer dans le même dossier que celui dans lequel vous voulez créer un fichier (je l'appellerai ensuite dossier x dans), puis l'administrateur du serveur. peut exécuter:
ls -al
puis regardez l'entrée du haut pour trouver quelque chose comme ça:
drwxr-xr-x 21 incoming 500 4096 2015-02-05 15:15 ./
Assurez-vous que l'élément le plus à droite est un './' afin de connaître les informations du dossier x.
Désormais, la solution la plus simple (mais pas la plus sécurisée) consiste à modifier les autorisations en 777 afin que tout le monde ait un accès en lecture et en écriture au dossier.
Lorsque les autorisations sont modifiées et que vous récupérez à nouveau la liste, vous devriez voir ceci:
drwxrwxrwx 21 incoming 500 4096 2015-02-05 15:15 ./
Vous devrez peut-être également définir un umask par défaut (égal à 777 autorisations moins) pour définir les autorisations par défaut si aucune n'est explicitement définie pour chaque fichier ou dossier que vous créez.
Votre répertoire doit être accessible en écriture à l'utilisateur qui exécute le serveur Web. Cela sera différent selon les systèmes d'exploitation, voire entre les différentes distributions Linux.
Sur mon serveur Ubuntu, le serveur Web est exécuté par l'utilisateur www-data
. Pour corriger les autorisations, j'utiliserais cette commande:
Sudo chown -R www-data /var/www/example.com/prPages/