擅长:python、mysql、java
<p>在Python2.5及更高版本中,我认为更好的方法是使用上下文管理器,如下所示:</p>
<pre><code>import contextlib
import os
@contextlib.contextmanager
def pushd(new_dir):
previous_dir = os.getcwd()
os.chdir(new_dir)
yield
os.chdir(previous_dir)
</code></pre>
<p>然后您可以按如下方式使用它:</p>
<pre><code>with pushd('somewhere'):
print os.getcwd() # "somewhere"
print os.getcwd() # "wherever you started"
</code></pre>
<p>通过使用上下文管理器,您将成为异常并返回值安全的:即使您从上下文块内部抛出异常或返回,您的代码也将始终cd回到其起始位置。</p>
<p>也可以在嵌套块中嵌套pushd调用,而不必依赖全局目录堆栈:</p>
<pre><code>with pushd('somewhere'):
# do something
with pushd('another/place'):
# do something else
# do something back in "somewhere"
</code></pre>