Je reçois l'erreur suivante:
WindowsError: [Error 2] The system cannot find the file specified
Mon code est:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bits. Python 3.x dernier, stable.
Des idées?
Merci,
Je reçois l'erreur suivante:
WindowsError: [Error 2] The system cannot find the file specified
Mon code est:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bits. Python 3.x dernier, stable.
Des idées?
Merci,
Réponses:
Lorsque la commande est un shell intégré, ajoutez un 'shell = True' à l'appel.
Par exemple pour
dir
vous tapez:Pour citer la documentation:
la source
dir.exe
alors qu'il y a un/bin/ls
in * nix.dir
est implémenté par CMD.EXE tout commecd
est implémenté par bash .PATH
depuis leos.environ
et de le rechercher manuellement.Sous Windows, je crois que le
subprocess
module ne regarde pas dans lePATH
sauf si vous passezshell=True
car il est utiliséCreateProcess()
dans les coulisses. Cependant, celashell=True
peut représenter un risque pour la sécurité si vous transmettez des arguments qui peuvent provenir de l'extérieur de votre programme. Poursubprocess
pouvoir néanmoins trouver le bon exécutable, vous pouvez utilisershutil.which
. Supposons que l'exécutable dans votrePATH
soit nomméfrob
:(Cela fonctionne sur Python 3.3 et supérieur.)
la source
Sous Windows, vous devez appeler via cmd.exe. Comme Apalala l'a mentionné, les commandes Windows sont implémentées dans cmd.exe et non en tant qu'exécutables séparés.
par exemple
/ c dit à cmd d'exécuter la commande suivante
C'est plus sûr que d'utiliser shell = True, qui permet les injections shell.
la source
/k
plutôt que/c
. Entrezcmd /?
sur la ligne de commande pour plus de détails.Si vous utilisez PowerShell, alors ce sera
subprocess.call(['powershell','-command','dir'])
. Powershell prend en charge une grande partie des commandes POSIXla source
Après avoir beaucoup gratté la tête, j'ai découvert que l'exécution d'un fichier situé dans C: \ Windows \ System32 \ tout en exécutant une version 32 bits de python sur une machine 64 bits est un problème potentiel, car Windows tente de surpasser le processus, et redirigez les appels vers C: \ Windows \ System32 vers C: \ Windows \ SysWOW64.
J'ai trouvé un exemple de résolution de ce problème ici: http://code.activestate.com/recipes/578035-disable-file-system-redirector/
la source
Pour citer la documentation:
"Avant Python 3.5, ces trois fonctions comprenaient l'API de haut niveau à sous-traiter. Vous pouvez désormais utiliser run () dans de nombreux cas, mais beaucoup de code existant appelle ces fonctions."
SO: au lieu de subprocess.call, utilisez subprocess.run pour Python 3.5 et supérieur
la source
J'ai rencontré le même problème pendant que j'appelais un PHP. La raison est que PHP n'est pas dans PATH, donc la commande PHP n'a pas été trouvée. Mais PowerShell a trouvé qu'il existe à l'emplacement actuel et il suggère de remplacer le 'PHP' par le '. \ PHP' si je fais confiance à cette commande. Ensuite, ça marche bien.
la source