J'essaie d'appeler un fichier python "hello.py" à partir de l'interpréteur python avec sous-processus. 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:\Python34\lib\subprocess.py", line 537, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Python34\lib\subprocess.py", line 858, in __init__
restore_signals, start_new_session)
File "C:\Python34\lib\subprocess.py", line 1111, in _execute_child
startupinfo)
OSError: [WinError 193] %1 is not a valid Win32 application
Existe-t-il également un autre moyen "d'appeler un script python avec des arguments" autrement qu'en utilisant un sous-processus? Merci d'avance.
L'erreur est assez claire. Le fichier hello.py
n'est pas un fichier exécutable. Vous devez spécifier l'exécutable:
subprocess.call(['python.exe', 'hello.py', 'htmlfilename.htm'])
Vous aurez besoin de python.exe
pour être visible dans le chemin de recherche ou vous pouvez transmettre le chemin complet au fichier exécutable qui exécute le script d'appel:
import sys
subprocess.call([sys.executable, 'hello.py', 'htmlfilename.htm'])
Les installateurs Python enregistrent généralement les fichiers .py avec le système. Si vous exécutez le shell explicitement, cela 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 sur la 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 alors que j'avais oublié d'utiliser Shell=True
dans le subprocess.call
.
subprocess.call('python modify_depth_images.py', Shell=True)
Pour exécuter une commande externe sans interagir avec elle, telle qu'une ferait avec os.system (), utilisez la fonction call ().
sous-processus d'importation
Commande simple subprocess.call (['ls', '-1'], Shell = True)
J'ai aussi vécu cette erreur. Ensuite, j'installe le package de Visual Studio 2015 Redistribution via ce lien. Problème résolu:). Essayez-le avant de faire d'autres modifications.