擅长:python、mysql、java
<p>下面是一个上下文管理器更改工作目录的示例。它比其他地方引用的<a href="http://code.activestate.com/recipes/576620-changedirectory-context-manager" rel="noreferrer">ActiveState version</a>更简单,但这可以完成任务。</p>
<h3>上下文管理器:<code>cd</code></h3>
<pre><code>import os
class cd:
"""Context manager for changing the current working directory"""
def __init__(self, newPath):
self.newPath = os.path.expanduser(newPath)
def __enter__(self):
self.savedPath = os.getcwd()
os.chdir(self.newPath)
def __exit__(self, etype, value, traceback):
os.chdir(self.savedPath)
</code></pre>
<p>或者使用<a href="https://docs.python.org/2/library/contextlib.html#contextlib.contextmanager" rel="noreferrer">ContextManager</a>尝试<a href="https://stackoverflow.com/a/24176022/263998">more concise equivalent(below)</a>。</p>
<h3>示例</h3>
<pre><code>import subprocess # just to call an arbitrary command e.g. 'ls'
# enter the directory like this:
with cd("~/Library"):
# we are in ~/Library
subprocess.call("ls")
# outside the context manager we are back wherever we started.
</code></pre>