使用 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 中执行给定的命令 - 因此脚本的工作目录根本不受影响。

目录实际上已更改,但在另一个进程中,脚本的子级已更改。有一个简单的规则要记住:孩子永远不能影响其父母的环境(PATH,CWD等)。

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

^ 这将生成 2 个独立的贝壳,请尝试:

sh("cd /home; pwd")

当你运行sh函数时,你会生成一个新的bash进程,然后改变当前目录并退出。 然后你生成一个新进程,它对第一个 bash 进程发生了什么一无所知。 其当前目录再次设置为当前用户的主目录。
要更改 Python 进程的当前工作目录,请使用

os.chdir("blah")`

每个sh( )调用都会生成一个不同的 shell,因此您正在影响 shell 的工作目录,而不是 python 的工作目录。 要更改 python 工作目录,请使用 chdir()

相关内容

  • 没有找到相关文章

最新更新