【问题标题】:Why won't os.chdir() change my current working directory?为什么 os.chdir() 不会更改我当前的工作目录?
【发布时间】:2025-12-27 14:55:12
【问题描述】:

当我在终端 shell 中输入以下内容时,我当前的工作目录不会改变。我没有收到任何错误代码。

import os
os.chdir('/Users/*myname*/Documents')

当我退出 shell 并在终端中输入“pwd”时,我不断收到/Users/*myname*。它不会将当前工作目录更改为Documents。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 改变Python进程的工作目录,不影响父进程和工作目录。调用os.getcwd()获取当前Python进程的工作目录
  • 如果你想改变shell的工作目录,你需要使用它的cd builtin,而不是一个单独的Python进程。工作目录是每个进程的属性,而不是所有进程共享的全局状态。子进程继承其父进程的工作目录,否则两个进程的工作目录相互独立。

标签: python working-directory


【解决方案1】:

每个进程都有自己的“当前工作目录”。 os.chdir 更改执行它的 python 进程的当前工作目录:

>>> import os
>>> os.getcwd()
'/'
>>> os.chdir('/tmp')
>>> os.getcwd()
'/tmp'

一旦你退出 python 进程并返回到产生它的 shell 进程。该进程的工作目录不会受到影响。

【讨论】:

    【解决方案2】:

    您可以将 python shell 想象成一个单独的进程。进入该 shell 后,您将被转移到“另一个终端”,您可以在其中使用 os 之类的库以编程方式与文件系统进行交互。
    您可以尝试在更改目录后列出当前目录中的所有文件以验证更改。在os.chdir('/Users/myname/Documents') 之后插入os.listdir()

    然而,一旦你退出 python shell,你就会回到你开始的前一个 shell 进程。在那里,当前工作目录没有改变。

    【讨论】:

      【解决方案3】:

      chdir 不是这样工作的。

      您使用 os 模块发出的任何命令都适用于 Python 上下文而不是终端上下文。

      Ex - 您在/Users/abc 中打开一个终端,然后在那里运行一个 python 解释器,您将在该 python 解释器中获得一个工作目录,现在如果您对当前路径进行任何更改,它将工作但在该 python 上下文中和它不会影响您的终端打开的位置。

      试试这个 - 切换到一个目录后,使用 python 创建一个文件,你会得到你 chdir 所在的文件。

      【讨论】:

      • 您的第二句话过于宽泛。如果我使用os.remove 删除文件,则该文件已消失,退出 Python 后无法恢复。
      最近更新 更多