Python 相当于“cd -”

gag*_*nso 2 python directory python-2.7

我正在编写一个脚本,该脚本应该根据输入更改目录,然后返回到执行脚本的目录。

我目前正在这样做:

old_dir = os.getcwd()
os.chdir(<new_dir>)
#do something
os.chdir(old_dir)
#do something
Run Code Online (Sandbox Code Playgroud)

是否有 Python 等效项cd -可以将目录更改为前一个目录?

以下问题期望使用任何模块得到答案,而我正在寻找类似于cd -.

Cha*_*ffy 6

你已经在做的事情相当于cd -.

shellcd内置更新OLDPWDshell 变量(特别是“shell 变量”,而不是“环境变量”,因此该值不会被子进程继承),并且该值用于cd -. 然而,没有与此等效的底层操作系统调用;它纯粹是一个 shell 函数。因此,在非 shell 语言中,如果您希望能够恢复,则维护类似的变量是您自己的责任。


您可能会考虑的一件事是上下文管理器:

from contextlib import contextmanager

@contextmanager
def cwd(path):
    oldpwd=os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(oldpwd)
Run Code Online (Sandbox Code Playgroud)

...用作:

os.chdir('/tmp') # for testing purposes, be in a known directory
print 'before context manager: %s' % os.getcwd()
with cwd('/'):
    print 'inside context manager: %s' % os.getcwd()
print 'after context manager: %s' % os.getcwd()
Run Code Online (Sandbox Code Playgroud)

...这会产生类似的结果:

before context manager: /tmp
inside context manager: /
after context manager: /tmp
Run Code Online (Sandbox Code Playgroud)

这实际上优于您请求等效项的 shell 内置函数:与 不同的是cd -,当由于抛出异常而退出块时,这也会处理变回,而由do_something || return-style 错误处理触发的早期函数退出壳牌公司不会提供此类保证。它还可以嵌套,并且调用不会覆盖彼此的OLDPWD值——如果您使用cd -.