我巧合地发现我无法从 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 的。要更改 pythons 工作目录,请使用chdir()