2012-12-05 27 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")`