首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中实现pushd

在python中实现pushd
EN

Stack Overflow用户
提问于 2019-07-13 00:21:43
回答 1查看 572关注 0票数 0

我正在尝试理解以下内容是如何实现Unix命令pushd的。具体地说,在不产生任何结果的情况下,yield命令的用途是什么。

代码语言:javascript
复制
@contextmanager
def pushd(path):
    prev = os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(prev)

根据维基百科的说法,“pushd命令将当前工作目录保存在内存中,这样它就可以随时返回,也可以选择切换到新目录。”此代码块的哪一部分执行此定义中的哪些函数?

EN

回答 1

Stack Overflow用户

发布于 2020-03-18 19:34:43

要理解这段代码,你必须理解为什么要使用@contextmanager装饰器。它允许您在with语句中使用一些函数,这些函数将为您处理上下文。因此,您希望在某个目录中执行某些操作,然后跳回-您的操作在您跳过的目录的上下文中是有意义的。因此,此函数的用例如下所示:

代码语言:javascript
复制
In [4]: os.chdir('/var')                                                                                                                                                                     

In [5]: os.getcwd()                                                                                                                                                                          
Out[5]: '/var'

In [6]: with pushd('/etc'): 
   ...:     print(os.getcwd()) 
   ...:                                                                                                                                                                                      
/etc

In [7]: os.getcwd()                                                                                                                                                                          
Out[7]: '/var'

正如你所看到的--一个目录在with块中变成了/etc,但之后它又回到了/var,类似于popd的行为。

在这种情况下,need是上下文管理器装饰器API的一部分,在这种情况下它不需要返回任何内容。它用的是像这样的结构

代码语言:javascript
复制
with open('my_file.txt') as file:
   do_something_with_file(file)

你实际上需要一些资源来处理内部上下文。

有关本模块目标的更多信息,请参阅contextlib文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57010718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档