2011-02-02 44 views
5

我使用os.system()來執行Windows命令行外殼程序。我想更改Windows cmd當前目錄。下面是做這件事的一種方法:Python:是否可以在不更改實際當前目錄的情況下更改Windows命令行shell當前目錄?

os.chdir('newPath') 

chdir()也將改變實際的Python當前的工作目錄。我不想更改實際的Python工作目錄,因爲我想讓我的腳本的其他部分在原始當前工作目錄中運行。我想改變的只是Windows cmd當前的工作目錄。換句話說:我想要os.system()命令在當前的一個工作目錄(Windows cmd當前工作目錄)中運行,而其他任何內容都應該在另一個當前工作目錄(實際的Python當前工作目錄)中運行。

這裏的另一種嘗試改變在Windows在cmd當前目錄:

os.system('cd newPath') 

然而,這顯然並不因爲cd newPath命令執行後立即在Windows在cmd當前目錄工作復位(因爲我將不會在下次調用os.system()時使用相同的Windows命令shell)。

是否有可能爲Windows cmd shell有一個單獨的當前工作目錄? (與當前的實際工作目錄分開)。

+1

`我想保持當前的工作目錄,而只更改Windows在cmd當前工作directory` - 什麼? – 2011-02-02 23:51:53

+0

@BlueRaja:你說得對。我不清楚。剛剛編輯了這個問題,使其更加清晰。 – snakile 2011-02-03 00:17:36

回答

7

subprocess模塊旨在取代os.system

其中,它爲您提供subprocess.Popen(),它需要cwd參數來指定生成的進程的工作目錄(與您的情況完全相同)。

參見:http://docs.python.org/library/subprocess.html

用法示例替換os.system

p = subprocess.Popen("yourcmd" + " yourarg", shell=True, cwd="c:/your/path") 
sts = os.waitpid(p.pid, 0)[1] 
1

如果它只有在Windows上運行,一種方法可能是:

os.system('start /d newPath cmd') 
+0

爲什麼不只是'啓動CD mypath'? hoevever目前還不太清楚這個問題在哪裏,考慮了什麼zigdon和其他人指出 – MattiaG 2011-02-03 00:06:38

+0

我想同樣的解決方案也適用於Linux。 – 2012-04-01 08:56:25

1

當您使用os.system,你不能重複使用相同的命令shell,但產卵爲每個請求一個新的。這意味着您實際上無法期望其中的更改在調用之間傳播。

雖然你可以編寫一個包裝器,但在啓動命令之前,它總是會變成你想要的目錄。

相關問題