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.

18
demandé sur Caxton 2014-09-03 23:12:23

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'])
20
répondu David Heffernan 2014-09-03 19:14:23

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" %*
7
répondu tdelaney 2014-09-03 20:03:33

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

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)

1
répondu Mona Jalal 2017-08-04 07:16:43

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.

0
répondu S.D.N Chanaka Fernando 2018-09-22 07:16:47