2009-11-06 32 views
136

有沒有辦法在Python的subprocess.Popen()中指定命令的運行目錄?指定popen的工作目錄

例如:

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

我的Python腳本位於C:\programs\python

是可以在目錄中運行D:\test\localC:\mytool\tool.exe

如何設置子進程的工作目錄?

+1

牢記子.call僅僅是一個子過程的簡單包裝.Popen,這個包裝也處理Popen的所有參數,至少據我記得:)在簡單的情況下,更好地堅持subprocess.call – shabunc 2013-10-31 13:49:08

回答

192

subprocess.Popentakes a cwd argument設置當前工作目錄;您還需要跳過反斜槓('d:\\test\\local'),或使用r'd:\test\local',以便反斜槓不會被Python解釋爲轉義序列。你寫的方式,\t部分將被翻譯成標籤

所以,你的新行應該是這樣的:

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

要使用Python腳本路徑CWD,import os和使用定義CWD這樣的:

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

什麼效果ct,如果有的話,會添加Shell = True的參數也設置cwd? – 2009-11-06 03:17:19

+2

@T。 Stone:對於一個獨立的可執行文件,它不應該改變任何東西,除非這個exe依賴於shell中的一些環境變量,也許。但是,使用'shell = False',你不能使用'cd'這樣的shell內建命令:也就是說,在Linux上用shell來試試這個:subprocess.Popen(「cd/tmp; pwd」)' – 2009-11-06 03:22:05

+1

謝謝很多!它就像一個魅力! – icn 2009-11-06 05:08:06