协慌网

登录 贡献 社区

等价于 shell'cd' 命令来更改工作目录?

cd是用于更改工作目录的 shell 命令。

如何在 Python 中更改当前的工作目录?

答案

您可以使用以下命令更改工作目录:

import os

os.chdir(path)

使用此方法时,有两个最佳实践可遵循:

  1. 在无效路径上捕获异常(WindowsError,OSError)。如果抛出异常,请不要执行任何递归操作,尤其是破坏性操作。它们将沿旧路径而不是新路径运行。
  2. 完成后,返回到旧目录。可以通过将 chdir 调用包装在上下文管理器中以异常安全的方式完成,就像 Brian M. Hunt 在他的答案中所做的那样。

更改子流程中的当前工作目录不会更改父流程中的当前工作目录。 Python 解释器也是如此。您不能使用os.chdir()更改调用进程的 CWD。

这是上下文管理器更改工作目录的示例。它比其他地方提到的 ActiveState 版本更简单,但这可以完成工作。

上下文管理器: cd

import os

class cd:
    """Context manager for changing the current working directory"""
    def __init__(self, newPath):
        self.newPath = os.path.expanduser(newPath)

    def __enter__(self):
        self.savedPath = os.getcwd()
        os.chdir(self.newPath)

    def __exit__(self, etype, value, traceback):
        os.chdir(self.savedPath)

或者使用ContextManager尝试更简洁的等效方法(如下)

例子

import subprocess # just to call an arbitrary command e.g. 'ls'

# enter the directory like this:
with cd("~/Library"):
   # we are in ~/Library
   subprocess.call("ls")

# outside the context manager we are back wherever we started.

我会这样使用os.chdir

os.chdir("/path/to/change/to")

顺便说一句,如果您需要找出当前路径,请使用os.getcwd()

这里更多