2012-12-05 32 views
5

我巧合的發現,我無法從python代碼中改變實際的目錄。我的測試,程序如下:用python改變目錄

from os import system 

def sh(script): 
    system("bash -c '%s'" % script) 

sh("cd /home") 
sh("pwd") 

pwd輸出不/home,但所在的目錄,上面生活的代碼。

有人可以解釋爲什麼會發生這種情況嗎?

+0

您應該改用os.chdir()。 –

回答

6

的問題是,你執行shell命令,而不是真正改變使用os.chdir()

每個os.system()調用該目錄中的一個新的shell執行給定的命令 - 所以腳本的工作目錄是不受任何影響。

5

該目錄實際上已更改,但在另一個過程,您的腳本的子。有一條簡單的規則要記住:一個孩子永遠不會影響其父母的環境(PATH,CWD等)。

+0

這是有道理的。謝謝! – Tengis

3
sh("cd /home") 
sh("pwd") 

^此產卵2個分離的外殼,嘗試:

sh("cd /home; pwd") 
1

每個sh()調用產生不同的外殼,所以你影響shell的工作目錄,而不是Python的。要更改pythons工作目錄,請使用chdir()

2

當您運行sh函數時,會生成一個新的bash進程,然後該進程將更改當前目錄並退出。然後你產生一個新的進程,它對第一個bash進程發生的事情一無所知。其當前目錄再次設置爲當前用戶的主目錄。
要更改的Python進程的當前工作目錄使用

os.chdir("blah")`