cwd を復元するデコレータを書くにはどうすればいいですか? 質問する

cwd を復元するデコレータを書くにはどうすればいいですか? 質問する

現在の作業ディレクトリを、デコレートされた関数が呼び出される前の状態に復元するデコレータをどのように記述すればよいでしょうか。言い換えると、 を実行する関数でデコレータを使用するとos.chdir()、関数が呼び出された後に cwd は変更されません。

ベストアンサー1

デコレータの答えは出ました。デコレータは、要求どおりに関数定義段階で機能します。

Python 2.5以降では、関数でこれを行うオプションもあります。電話コンテキストマネージャーを使用したステージ:

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 の提案に従ってエラー処理を追加しました。私の回答は投票で承認されたので、他のすべての問題はさておき、完全な回答を提供するのは公平です。

おすすめ記事