2010-02-13 5 views
4

Je souhaite lancerComment exécuter une commande VS2008 à partir de Python et récupérer sa sortie?

tf changeset 12345 

Utilisation de l'outil Visual Studio 2008 de commande. Il est situé dans: "c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\" et la commande qui est lancée est: %comspec% /k ""c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86

Je voudrais ajouter le "tf changeset 12345" en quelque sorte et l'enregistrer dans une chaîne SANS d'abord la rediriger vers un fichier. J'ai remarqué que quand je l'appelle simplement à partir de la ligne de commande, je reçois GUI quand je tape:

tf changeset 12345 

et je reçois la sortie textuelle quand je fais:

tf changeset 12345 > out.txt 

Je préfère ne pas créer un fichier sur le système de fichiers, mais j'espère juste le lire de la "manière Pythonic".

J'ai vu de brefs exemples de os.system(), sous-processus, mais aucun d'entre eux semblent montrer comment faire ce que je veux faire:

  1. exécuter le processus à partir d'un répertoire (de préférence sans en utilisant chdir)
  2. Exécution d'une commande contenant des variables d'environnement + texte personnalisé.
  3. Redirigez la sortie sans créer de fichier temporaire.

J'espère que vous pouvez m'aider à me rapprocher de ce que je veux. Il serait utile si vous avez testé la solution sur VS2008 ou un autre programme Windows.

Merci!

Répondre

3
process = subprocess.Popen(['tf', 'changeset', '12345'], cwd='c:/somedir', env={'SOMEENVVAR': 'SOMEVALUE', ...}, stdout=subprocess.PIPE) 

for line in process.stdout: 
    print line 

process.terminate() 
+0

Laissez-moi tester cela. –

2

Jetez un oeil à ce code J'ai utilisé here pour faire le travail que vous recherchez. Ceci est écrit en C#, et est une classe flexible, vous avez juste besoin de changer la commande, regardez dans ps.FileName et ps.Arguments, la sortie de la commande est redirigée vers une instance StringBuilder pour l'analyse si nécessaire. La commande shell exécutant dans une fenêtre est complètement cachée et ne montre pas.

Espérons que cela aide, Cordialement, Tom.

+0

Merci, mais une solution Python serait bien aussi. –

Questions connexes