OSError: [WinError 193] %1 N'est pas une application Win32 valide
j'essaie d'appeler un fichier python "hello.py" depuis l'interpréteur python avec subprocess. Mais je suis incapable de résoudre cette erreur. [Python 3.4.1].
import subprocess
subprocess.call(['hello.py', 'htmlfilename.htm'])
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
subprocess.call(['hello.py', 'htmlfilename.htm'])
File "C:Python34libsubprocess.py", line 537, in call
with Popen(*popenargs, **kwargs) as p:
File "C:Python34libsubprocess.py", line 858, in __init__
restore_signals, start_new_session)
File "C:Python34libsubprocess.py", line 1111, in _execute_child
startupinfo)
OSError: [WinError 193] %1 is not a valid Win32 application
y a-t-il aussi une autre façon de "Appeler un script python avec des arguments" autre que l'utilisation de subprocess? Merci à l'avance.
4 réponses
L'erreur est assez clair. Le fichier hello.py
n'est pas un fichier exécutable. Vous devez spécifier le fichier exécutable:
subprocess.call(['python.exe', 'hello.py', 'htmlfilename.htm'])
vous aurez besoin de python.exe
pour être visible sur le chemin de recherche, ou vous pouvez passer le chemin complet au fichier exécutable qui exécute le script appelant:
import sys
subprocess.call([sys.executable, 'hello.py', 'htmlfilename.htm'])
les installateurs Python s'inscrivent généralement .fichiers py avec le système. Si vous exécutez le shell explicitement, il fonctionne:
import subprocess
subprocess.call(['hello.py', 'htmlfilename.htm'], shell=True)
# --- or ----
subprocess.call('hello.py htmlfilename.htm', shell=True)
vous pouvez vérifier vos associations de fichiers en ligne de commande avec
C:\>assoc .py
.py=Python.File
C:\>ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %*
j'ai eu la même erreur en oubliant d'utiliser shell=True
dans le subprocess.call
.
subprocess.call('python modify_depth_images.py', shell=True)
exécuter une commande externe sans interagir avec elle, comme un le feriez avec os.system(), Utilisez la fonction call ().
importer des sous-processus
commande Simple sous-processus.appel(['ls', '-1'], shell=True)
j'ai aussi connu cette erreur. Puis-je installer Visual Studio 2015 Redistribution package via ce lien. Problème résolu:). L'essayer, avant de faire d'autres modifications.