2009-11-06 5 views
136

Existe-t-il un moyen de spécifier le répertoire de commande en cours d'exécution dans Python subprocess.Popen()?Spécifier le répertoire de travail pour popen

Par exemple:

Popen('c:\mytool\tool.exe',workingdir='d:\test\local') 

script Python Mon est situé dans C:\programs\python

Est-il possible d'exécuter C:\mytool\tool.exe dans le répertoire D:\test\local?

Comment définir le répertoire de travail pour un sous-processus?

+1

garder à l'esprit que le sous-processus .call est juste une enveloppe fine sur subprocess.Popen, et ce wrapper traite tous les arguments de Popen, au moins autant que je me souvienne :) Dans les cas simples, mieux s'en tenir à subprocess.call – shabunc

Répondre

192

subprocess.Popentakes a cwd argument pour définir le répertoire de travail en cours; vous souhaiterez également échapper vos barres obliques inverses ('d:\\test\\local') ou utiliser r'd:\test\local' pour que les barres obliques inverses ne soient pas interprétées comme des séquences d'échappement par Python. De la façon dont vous l'avez écrite, la partie \t sera traduite en , onglet.

Ainsi, votre nouvelle ligne devrait ressembler à:

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local') 

Pour utiliser votre chemin de script Python comme CWD, import os et définissent CWD en utilisant ceci:

os.path.dirname(os.path.realpath(__file__)) 
+2

What effe ct, le cas échéant, serait l'ajout de Shell = True aux arguments ont également sur la définition du cwd? –

+2

@T. Stone: Pour un exécutable autonome, il ne devrait rien changer, sauf si l'exe dépend de certaines variables d'environnement dans le shell, peut-être. Mais, avec 'shell = False', vous ne pouvez pas utiliser un shell intégré tel que' cd': par exemple, essayez ceci sur Linux avec shell de deux façons: 'subprocess.Popen (" cd/tmp; pwd ")' –

+1

merci beaucoup! il fonctionne comme un charme! – icn

Questions connexes