À l'aide de sous-processus pour exécuter un script Python sur Windows

Est-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 sur 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

monkut de l' commentaire: Le cas d'utilisation n'est pas claire. Pourquoi utiliser des sous-processus pour exécuter un script python? Est-il quelque chose vous empêche d'importer le script et l'appel de la fonction nécessaire?

J'ai écrit un script vite fait pour tester l'ensemble des fonctionnalités de Python-outil de ligne de commande (à tester sur différentes plates-formes). Fondamentalement, il fallait créer un ensemble de fichiers dans un dossier temp, exécutez le script de cette et de vérifier les fichiers ont été renommés correctement.

Je pourrait avoir importé le script et a appelé la fonction, mais depuis elle s'appuie sur sys.argv et utilise sys.exit(), j'aurais 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)

Aussi, je voulais capturer le stdout et stderr pour le débogage au cas où quelque chose s'est mal passé.

Bien sûr une meilleure façon serait d'écrire le script en plus de l'unité-testable, mais le script est fondamentalement "fait" et je suis en train de faire un dernier lot de tester avant de faire un "1.0" libération (après quoi, je vais faire une réécriture/restructurer, ce qui sera beaucoup plus propre et plus testable)

Fondamentalement, il était beaucoup plus facile de simplement exécuter le script comme un processus, après la recherche de la sys.executable variable. Je l'ai écrit comme un shell-script, mais cela n'aurait pas été de la croix-plate-forme. Le script final peut être trouvé ici

  • Le cas d'utilisation n'est pas claire. Pourquoi utiliser des sous-processus pour exécuter un script python? Est-il quelque chose vous empêche d'importer le script et l'appel de la fonction nécessaire?
  • Eu le même problème lors de l'exécution de nodejs modules de python. sous-processus.appel([r'..\nodejs\mnp'], shell=True) a résolu le problème.
InformationsquelleAutor dbr | 2009-05-26