Python相当于“cd - ”

时间:2016-06-23 15:44:08

标签: python python-2.7 directory

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

我目前正在这样做:

static Function<Function<Integer, Integer>,
            Function<Function<Integer, Integer>,
                    Function<Integer, Integer>>> compose =
            x -> y -> z -> x.apply(y.apply(z));

是否有相当于old_dir = os.getcwd() os.chdir(<new_dir>) #do something os.chdir(old_dir) #do something 的Python,它会将目录更改为上一个目录?

以下question期望使用任何模块获得答案,而我正在寻找的内容类似于cd -

1 个答案:

答案 0 :(得分:4)

您正在做的 相当于cd -

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

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

from contextlib import contextmanager

@contextmanager
def cwd(path):
    oldpwd=os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(oldpwd)

...用作:

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()

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

before context manager: /tmp
inside context manager: /
after context manager: /tmp

这实际上是对你要求等效的shell内置的高级:与cd -不同,这也会在由于异常而退出块时进行更改被抛出,而由do_something || return触发的早期函数退出 - 在shell中的样式错误处理将不提供这样的保证。它也可以嵌套,并且调用不会覆盖彼此的OLDPWD值 - 如果您使用cd -嵌套了shell函数,就会发生这种情况。