如何杀死os.chdir()并使用更多代码

时间:2017-01-10 20:03:40

标签: python

这是我的脚本会做的

>>> import os
>>> os.mkdir(os.path.join(os.environ['TEMP'], 'HOME'))
>>> TEMPHOME = os.path.join(os.environ['TEMP'], 'HOME')
>>> TEMPHOME
'C:\\Users\\PURUSH~1\\AppData\\Local\\Temp\\HOME'
>>> os.chdir(TEMPHOME)

使用os.rmdir()尝试使用相同的目录抛出错误,如何使其工作?

>>> os.rmdir(TEMPHOME)

错误:

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    os.rmdir(TEMPHOME)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\PURUSH~1\\AppData\\Local\\Temp\\HOME'

1 个答案:

答案 0 :(得分:2)

只需记住您的原始目录并在完成后恢复。

import os
TEMPHOME = os.path.join(os.environ['TEMP'], 'HOME')
orig_dir = os.getcwd()
try:
    os.chdir(TEMPHOME)
    .... do your work
finally:
    os.chdir(orig_dir)

您可以通过在TemporaryDirectory

之上构建自己的上下文管理器来利用现有的临时目录代码
import os
import tempfile

class TempChdir(tempfile.TemporaryDirectory):

    def __enter__(self):
        super().__enter__()
        self.orig_dir = os.getcwd()
        os.chdir(self.name)
        return self

    def __exit__(self, *args):
        os.chdir(self.orig_dir)
        super().__exit__(*args)


with TempChdir() as tmpdir:
    ... do your work

不确定这更容易,但看起来更漂亮。