Existe-t-il un moyen simple d'exécuter un script Python sur Windows/Linux/OS X ?
Sur les deux derniers, subprocess.Popen("/the/script.py")
fonctionne, mais sous Windows, j'obtiens l'erreur suivante :
Traceback (most recent call last):
File "test_functional.py", line 91, in test_functional
log = tvnamerifiy(tmp)
File "test_functional.py", line 49, in tvnamerifiy
stdout = PIPE
File "C:\Python26\lib\subprocess.py", line 595, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 804, in _execute_child
startupinfo)
WindowsError: [Error 193] %1 is not a valid Win32 application
de monkut commentaire : Le cas d'utilisation n'est pas clair. Pourquoi utiliser un sous-processus pour exécuter un script en python ? Y a-t-il quelque chose qui vous empêche d'importer le script et d'appeler la fonction nécessaire ?
J'étais en train d'écrire un script rapide pour tester la fonctionnalité globale d'un outil en ligne de commande Python (pour le tester sur différentes plateformes). En gros, il fallait créer un tas de fichiers dans un dossier temporaire, exécuter le script sur celui-ci et vérifier que les fichiers étaient renommés correctement.
J'aurais pu importer le script et appeler la fonction, mais comme elle s'appuie sur sys.argv
et utilise sys.exit()
j'aurais eu besoin de faire quelque chose comme
import sys
import tvnamer
sys.argv.append("-b", "/the/folder")
try:
tvnamer.main()
except BaseException, errormsg:
print type(errormsg)
De plus, je voulais capturer le stdout et le stderr pour le débogage au cas où quelque chose ne fonctionnerait pas.
Bien sûr, un meilleur moyen serait d'écrire le script d'une manière plus testable à l'unité, mais le script est essentiellement "fait" et je fais un dernier lot de tests avant de faire une version "1.0" (après quoi je vais faire une réécriture/restructuration, qui sera beaucoup plus propre et plus testable)
Fondamentalement, il était beaucoup plus facile de simplement exécuter le script en tant que processus, après avoir trouvé le fichier sys.executable
variable. Je l'aurais bien écrit comme un shell-script, mais cela n'aurait pas été multiplateforme. La version finale du script peut être trouvée aquí
2 votes
Le cas d'utilisation n'est pas clair. Pourquoi utiliser subprocess pour exécuter un script en python ? Y a-t-il quelque chose qui vous empêche d'importer le script et d'appeler la fonction nécessaire ?
0 votes
J'ai eu le même problème en exécutant des modules nodejs depuis python. subprocess.call([r' \nodejs\npm '], shell=True) a résolu le problème.