Le script Python peut voir le Y: / Drive lorsqu’il est exécuté depuis IDLE mais pas la ligne de commande

J’ai un script python qui construit un fichier en recherchant dans les dossiers et en extrayant une liste de fichiers. Ce fichier fonctionne correctement et fonctionne comme prévu lorsque je l’ouvre et l’exécute dans IDLE, mais si j’exécute le script dans une fenêtre de ligne de commande, j’obtiens cette erreur:

C:\Windows\system32>python "C:\Users\ntreanor\Documents\RV Scripts\Server RV Sequence.py" Traceback (most recent call last): File "C:\Users\ntreanor\Documents\RV Scripts\Server RV Sequence.py", line 69, in  for foldername in os.listdir(pngFolders): WindowsError: [Error 3] The system cannot find the path specified: 'Y:/20_temp_script_testing/pr126 movs\\04_comp_pngs/*.*' 

Au cas où ce ne serait pas évident, oui, le chemin existe. Cela fonctionne non seulement dans IDLE mais j’ai vérifié deux fois et le chemin existe certainement.

J’ai aussi essayé de créer des dossiers avec un script qui fonctionne comme un démon et qui a un résultat similaire

 Traceback (most recent call last): File "D:\shotgun\shotgunEventDaemon.py", line 888, in process self._callback(self._shotgun, self._logger, event, self._args) File "D:\shotgun\plugins\CreateAssetFolders.py", line 72, in createAssetFolders os.makedirs(folder) File "D:\Python27\Lib\os.py", line 150, in makedirs makedirs(head, mode) File "D:\Python27\Lib\os.py", line 150, in makedirs makedirs(head, mode) File "D:\Python27\Lib\os.py", line 150, in makedirs makedirs(head, mode) File "D:\Python27\Lib\os.py", line 157, in makedirs mkdir(name, mode) WindowsError: [Error 3] The system cannot find the path specified: 'Y:/' 

C’est ce que le script a enregistré en tant que dossier juste avant cela:

 Making folder: Y:/07_design/04_environmental_elements\eec005-08_insect_ladybird_red_7_spots_wide 

(la raison pour laquelle il dit Y et pas tout le chemin est qu’il tente de rendre chaque dossier jusqu’à ce qu’il ne puisse plus revenir en arrière et que l’exception soit levée)

Les variables d’environnement de la fenêtre de ligne de commande affectent-elles d’une manière ou d’une autre le mappage de lecteur qui doit pointer le script vers le bon emplacement?

Le problème est probablement dû au fait que IDLE et votre ligne de commande s’exécutent avec un niveau de privilèges différent. Les lecteurs réseau mappés ne sont pas automatiquement disponibles pour tous les contextes utilisateur. Il y a une question de superutilisateur à ce sujet ici et beaucoup d’ autres ressources couvrent ce sujet. En bref, le lecteur réseau mappé est uniquement disponible pour les programmes exécutés au niveau auquel le mappage a été effectué.

Si vous avez mappé le lecteur réseau via l’interface utilisateur Windows, il sera mappé pour les programmes non élevés. Cependant, s’il a été mappé avec net use cela dépend du niveau de l’invite de commande lorsque le mapping a été effectué!

La désactivation du contrôle de compte d’utilisateur aura également une incidence sur la modification de ce comportement, tout comme l’utilisation d’une invite de commandes élevée (ou non), ce qui peut expliquer pourquoi certains ordinateurs affichent un comportement différent.

Je pense que votre problème est que vous essayez d’ouvrir le fichier *, ce qui bien sûr n’existe pas. open (path) prend le chemin comme une chaîne littérale et ne le traduit pas de toute façon, il s’attend donc à ce que cette valeur soit un nom de fichier valide. Vous devez changer votre code pour obtenir un répertoire au lieu d’un fichier, puis parcourir ce répertoire.