- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如何编写一个装饰器,将当前工作目录恢复到调用装饰函数之前的状态?换句话说,如果我在执行 os.chdir()
的函数上使用装饰器,则调用该函数后 cwd 不会更改。
最佳答案
已经给出了装饰者的答案;它按要求在函数定义阶段工作。
使用 Python 2.5+,您还可以选择在函数 call 阶段使用上下文管理器执行此操作:
from __future__ import with_statement # needed for 2.5 ≤ Python < 2.6
import contextlib, os
@contextlib.contextmanager
def remember_cwd():
curdir= os.getcwd()
try: yield
finally: os.chdir(curdir)
如果需要,可以在函数调用时使用:
print "getcwd before:", os.getcwd()
with remember_cwd():
walk_around_the_filesystem()
print "getcwd after:", os.getcwd()
这是一个不错的选择。
编辑:我按照 codeape 的建议添加了错误处理。由于我的答案已被投票,因此提供一个完整的答案是公平的,所有其他问题除外。
关于python - 如何编写恢复 cwd 的装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169070/
问题 一般来说,在不考虑任何特定平台的情况下,Perl 中的 Cwd::cwd 和 Cwd::getcwd 之间有什么区别?为什么 Perl 两者兼而有之?预期用途是什么,在什么场景下应该使用哪一种?
我是 nodeJS 的新手,也是 StackOverflow 的新手... 我开始开发我的第一个 SPA,使用 RequireJS 将我的源代码编译到“dist”文件夹中。我让 NodeJS 运行一个
我在不同的目录中有一堆 unittest 测试用例。还有一个目录只包含测试的帮助脚本。所以我的文件树看起来像这样 test_dir1 test_dir2 test_dir3 helper_script
我知道cwd代表“当前工作目录”,但是我不明白为什么它必须包含在gruntfile.js中。 脚本不会始终在当前工作目录中运行吗?为什么需要更改或指定另一个? 最佳答案 grunt.js驻留在我们项目
如何允许对 Deno.cwd() 使用的 CWD(当前工作目录)进行读取访问? 我只想要 CWD 的明确许可。 我不想让每次读取都带有简单的 --allow-read 标志。 我试图将 CWD 作为参
假设我想在运行时加载一个模块。我预计这会起作用 use warnings; use strict; eval { require Cwd; Cwd->import; }; if ($@
我想重命名一个位于外部的关于我的实际工作目录的文件,但我只想使用该目录的相对路径,而不是该文件的绝对路径。 更准确地说,如果os.getcwd()大喊“/home/jscherman/Document
我当前的代码: gulp.task('_sass', function() { var files = [ './vendor/bower_components/bootstr
我正在尝试让我的程序更改目录(到用户希望的位置)但我无法导航到那里并创建文件?看起来我可以导航到那里但是当我到达下一个系统调用时它返回到当前目录 有没有办法设置我的程序 cwd 指向的位置? std:
我创建了一个 Perl 模块,用于许多 Perl 脚本以使用 Net::SSH::Expect进行登录。 package myRoutines; # use v5.22; use strict; us
我知道检查当前目录 opendir(dir_name) ,但我需要检查其他路径,而不是 CWD(current working directory) , 或者是否有任何功能是在执行 时将CWD 移动到
如何编写一个装饰器,将当前工作目录恢复到调用装饰函数之前的状态?换句话说,如果我在执行 os.chdir() 的函数上使用装饰器,则调用该函数后 cwd 不会更改。 最佳答案 已经给出了装饰者的答案;
我想用 C 编写一个命令行工具,作为可以移植到 Windows/Mac/Linux 的高级“cd”或“pushd/popd”命令。 (完整的细节,如果你好奇的话,在 http://alsweigart
我在使用 abs_path() 时遇到问题.我给这个函数一个有效的路径,但我得到 undef作为返回值。使用以下代码从命令行读取路径。 use warnings; use strict; use Da
我正在构建一个 node.js 应用程序。为了执行命令,我正在使用子进程。在执行命令之前,我必须需要更改 CWD(当前工作目录)。所以我有如下代码。 const exec = require('chi
在我当前的代码中,我使用 process.cwd() 获取当前工作目录,然后加载一些文件(如配置文件)。 下面我将展示我的代码的概念以及我如何测试它。 这是目录结构: ├── index.js └──
在 C 中,当使用 stdio.h 中的 FILE 结构时,如果程序员尝试打开文件,则当前工作目录将相对于构建目录。 是否有某种设置(可能是编译器标志)我可以使用它来允许在编译或运行时将 CWD 设置
我的脚本在使用 python 运行时运行良好,但在我使用 py2app 构建它之后,文件和文件夹在 .app/Contents/Resources< 中创建。我使用 os.getcwd() 找出脚本所
无论出于何种原因, from subprocess import Popen, PIPE, STDOUT handle = Popen('echo %CD%', shell=True, stdout=
所以我有以下代码块: #!/usr/bin/env node const path = require('path'); const yargs = require('yargs').argv; co
我是一名优秀的程序员,十分优秀!