我巧合的發現,我無法從python代碼中改變實際的目錄。我的測試,程序如下:用python改變目錄
from os import system
def sh(script):
system("bash -c '%s'" % script)
sh("cd /home")
sh("pwd")
的pwd
輸出不/home
,但所在的目錄,上面生活的代碼。
有人可以解釋爲什麼會發生這種情況嗎?
我巧合的發現,我無法從python代碼中改變實際的目錄。我的測試,程序如下:用python改變目錄
from os import system
def sh(script):
system("bash -c '%s'" % script)
sh("cd /home")
sh("pwd")
的pwd
輸出不/home
,但所在的目錄,上面生活的代碼。
有人可以解釋爲什麼會發生這種情況嗎?
的問題是,你執行shell命令,而不是真正改變使用os.chdir()
每個os.system()
調用該目錄中的一個新的shell執行給定的命令 - 所以腳本的工作目錄是不受任何影響。
sh("cd /home")
sh("pwd")
^此產卵2個分離的外殼,嘗試:
sh("cd /home; pwd")
每個sh()
調用產生不同的外殼,所以你影響shell的工作目錄,而不是Python的。要更改pythons工作目錄,請使用chdir()
當您運行sh函數時,會生成一個新的bash進程,然後該進程將更改當前目錄並退出。然後你產生一個新的進程,它對第一個bash進程發生的事情一無所知。其當前目錄再次設置爲當前用戶的主目錄。
要更改的Python進程的當前工作目錄使用
os.chdir("blah")`
您應該改用os.chdir()。 –