我巧合地发现我无法在python代码中更改实际目录。我的测试程序如下:
from os import system
def sh(script):
system("bash -c '%s'" % script)
sh("cd /home")
sh("pwd")
pwd
的输出不是/home
,而是上面代码所在的目录。
有人可以解释为什么会这样吗?
答案 0 :(得分:6)
问题是您执行shell命令而不是使用os.chdir()
每个os.system()
调用在新shell中执行给定命令 - 因此脚本的工作目录根本不受影响。
答案 1 :(得分:5)
目录实际上已更改,但在另一个进程中,即脚本的子级。要记住一条简单的规则:孩子永远不会影响其父母的环境(PATH,CWD等)。
答案 2 :(得分:3)
sh("cd /home")
sh("pwd")
^这会生成2个独立的shell,请尝试:
sh("cd /home; pwd")
答案 3 :(得分:2)
运行sh函数时,会生成一个新的bash进程,然后更改当前目录并退出。然后你产生一个新的进程,它不知道第一个bash进程发生了什么。它的当前目录再次设置为当前用户的主目录 要更改Python进程'当前工作目录使用
os.chdir("blah")`
答案 4 :(得分:1)
每个sh( )
调用都会生成一个不同的shell,因此您正在影响shell的工作目录,而不是python的。要更改pythons工作目录,请使用chdir()