Windows ne peut pas trouver le fichier sur sous-processus.call()
J'obtiens 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 les plus récentes, stable.
Des idées?
Merci,
- et qu'est-ce que ce fichier exécutable?
- Le "android" partie exécutable du SDK Android
- Et est disponible sur le CHEMIN d'accès
- pouvez-vous l'exécutez à partir de la ligne de commande?
- Un peu de fond de ce que je suis en train d'accomplir. C'est pour Opendevice - un projet open source pour convertir les applications HTML5 dans l'appareil des applications spécifiques. Je suis en train de remplacer l'os.system() dans bitbucket.org/srirangan/opendevice/src/tip/tools/net/srirangan/... pour les sous-processus.call()
- Oui, je peux le lancer depuis la ligne de commande. os.sys("...") appels en Python aussi de travail.
- Si le chemin comporte des espaces, est-il cité? Et bien sûr, vous vous êtes échappé barres obliques inverses correctement, ou utilisé des barres obliques, droit?
Vous devez vous connecter pour publier un commentaire.
Lorsque la commande est un environnement intégré, ajoutez un "shell=True' à l'appel.
E. g. pour
dir
vous tapez:Pour citer un extrait de la documentation:
dir.exe
alors qu'il y a un/bin/ls
sous *nix.dir
est mis en œuvre par CMD.EXE un peu commecd
est mis en œuvre par bash.PATH
de laos.environ
et rechercher manuellement.Sur Windows, je crois que le
subprocess
module ne regardez pas dans lePATH
à moins que vous passiezshell=True
. Cependant,shell=True
peut être un risque pour la sécurité si vous êtes de passage des arguments qui peuvent provenir de l'extérieur de votre programme. Pour fairesubprocess
néanmoins en mesure de trouver le bon exécutable, vous pouvez utilisershutil.qui
. Supposons que le fichier exécutable dans votrePATH
est nomméfrob
:(Cela fonctionne sur Python 3.3 et ci-dessus).
Sur Windows, vous devez appeler par cmd.exe. Comme Apalala mentionné, commandes de Windows sont mis en œuvre dans cmd.exe pas en tant que distincts des exécutables.
par exemple
/c dit cmd pour exécuter la commande
C'est plus sûr que d'utiliser shell=True, ce qui permet à shell injections.
/k
au lieu de/c
. Entrezcmd /?
à la ligne de commande pour plus de détails.Si vous êtes à l'aide de powershell, puis dans il sera
subprocess.call(['powershell','-command','dir'])
. Powershell prend en charge une grande partie des commandes POSIXPour citer un extrait de la documentation:
"Avant Python 3.5, ces trois fonctions comprend le haut niveau de l'API de sous-processus. Vous pouvez maintenant utiliser run() dans de nombreux cas, mais beaucoup de code existant appels de ces fonctions."
DONC: au lieu de sous-processus.utilisation d'appel sous-processus.courir pour Python 3,5 et plus