2009-11-06 6 views
136

C'è un modo per specificare la directory di comando in esecuzione in Python subprocess.Popen()?Specificare la directory di lavoro per il popen

Ad esempio:

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

sceneggiatura mio Python si trova in C:\programs\python

IS è possibile eseguire C:\mytool\tool.exe nella directory D:\test\local?

Come si imposta la directory di lavoro per un sottoprocesso?

+1

tenere a mente che il sottoprocesso .call è solo un involucro sottile sul sottoprocesso.Popen, e questo wrapper si occupa anche di tutti gli argomenti di Popen, almeno per quanto mi ricordo :) In casi semplici, meglio attenersi al sottoprocesso.call – shabunc

risposta

192

subprocess.Popentakes a cwd argument per impostare la directory di lavoro corrente; dovrai anche sfuggire alle barre rovesciate ('d:\\test\\local') o utilizzare r'd:\test\local' in modo che le barre retroverse non vengano interpretate come sequenze di escape da Python. Il modo in cui lo hai scritto, la parte \t verrà tradotta in una scheda .

Così, la nuova linea dovrebbe essere simile:

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

Per usare il Python percorso script come CWD, import os e definiscono CWD utilizzare questo:

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

What effe ct, se ce ne sono, aggiungere Shell = True agli argomenti ha anche l'impostazione di cwd? –

+2

@T. Pietra: per un eseguibile standalone, non dovrebbe cambiare nulla, a meno che l'exe non dipenda da alcune variabili d'ambiente nella shell, forse. Ma con 'shell = False', non puoi usare una shell incorporata come' cd': cioè, prova questo su Linux con shell in entrambi i modi: 'subprocess.Popen (" cd/tmp; pwd ")' –

+1

grazie Un sacco! Esso funziona magicamente! – icn