我巧合地发现我无法从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()