有沒有辦法在Python的subprocess.Popen()
中指定命令的運行目錄?指定popen的工作目錄
例如:
Popen('c:\mytool\tool.exe',workingdir='d:\test\local')
我的Python腳本位於C:\programs\python
是可以在目錄中運行D:\test\local
C:\mytool\tool.exe
?
如何設置子進程的工作目錄?
有沒有辦法在Python的subprocess.Popen()
中指定命令的運行目錄?指定popen的工作目錄
例如:
Popen('c:\mytool\tool.exe',workingdir='d:\test\local')
我的Python腳本位於C:\programs\python
是可以在目錄中運行D:\test\local
C:\mytool\tool.exe
?
如何設置子進程的工作目錄?
subprocess.Popen
takes 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__))
什麼效果ct,如果有的話,會添加Shell = True的參數也設置cwd? – 2009-11-06 03:17:19
@T。 Stone:對於一個獨立的可執行文件,它不應該改變任何東西,除非這個exe依賴於shell中的一些環境變量,也許。但是,使用'shell = False',你不能使用'cd'這樣的shell內建命令:也就是說,在Linux上用shell來試試這個:subprocess.Popen(「cd/tmp; pwd」)' – 2009-11-06 03:22:05
謝謝很多!它就像一個魅力! – icn 2009-11-06 05:08:06
牢記子.call僅僅是一個子過程的簡單包裝.Popen,這個包裝也處理Popen的所有參數,至少據我記得:)在簡單的情況下,更好地堅持subprocess.call – shabunc 2013-10-31 13:49:08