我正在编写一个脚本,该脚本应根据输入更改目录,然后返回执行脚本的目录。
我目前正在这样做:
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 -
。
答案 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函数,就会发生这种情况。