当前位置:  开发笔记 > 编程语言 > 正文

如何使用Python将目录更改回原始工作目录?

如何解决《如何使用Python将目录更改回原始工作目录?》经验,为你挑选了3个好方法。

我有一个类似下面的功能.我不确定如何在jar执行结束时使用os模块返回到我原来的工作目录.

def run(): 
    owd = os.getcwd()
    #first change dir to build_dir path
    os.chdir(testDir)
    #run jar from test directory
    os.system(cmd)
    #change dir back to original working directory (owd)

注意:我认为我的代码格式是关闭的 - 不知道为什么.我提前道歉



1> Charles Duff..:

上下文管理器是这项工作非常合适的工具:

from contextlib import contextmanager

@contextmanager
def cwd(path):
    oldpwd=os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(oldpwd)

...用作:

os.chdir('/tmp') # for testing purposes, be in a known directory
print 'before context manager: %s' % os.getcwd()
with cwd('/'):
    # code inside this block, and only inside this block, is in the new directory
    print 'inside context manager: %s' % os.getcwd()
print 'after context manager: %s' % os.getcwd()

...会产生类似的东西:

before context manager: /tmp
inside context manager: /
after context manager: /tmp

这实际上是优越cd -shell内建的,因为它也需要照顾,当块退出目录切换回因抛出异常.


对于您的特定用例,这将是:

with cwd(testDir):
    os.system(cmd)

另一个需要考虑的选项是使用subprocess.call()而不是os.system(),它将允许您为要运行的命令指定工作目录:

# note: better to modify this to not need shell=True if possible
subprocess.call(cmd, cwd=testDir, shell=True)

...这将阻止您根本不需要更改解释器的目录.



2> grieve..:

您只需添加以下行:

os.chdir(owd)

只是注意这也回答了你的其他问题.



3> Alex Coventr..:

使用建议os.chdir(owd)很好.将需要更改目录的代码放在一个try:finally块中(或者在python 2.6及更高版本中,一个with:块)是明智的.这样可以降低return在更改回原始目录之前意外放入代码的风险.

def run(): 
    owd = os.getcwd()
    try:
        #first change dir to build_dir path
        os.chdir(testDir)
        #run jar from test directory
        os.system(cmd)
    finally:
        #change dir back to original working directory (owd)
        os.chdir(owd)

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有