
class cd(object): def __init__(self, path): self.inner_path = path
def __enter__(self): self.outer_path = os.getcwd() os.chdir(self.inner_path)
def __exit__(self, exc_type, exc_val, exc_tb): os.chdir(self.outer_path)
def __yield__(self): self.inner_path = os.getcwd() os.chdir(self.outer_path)
def __send__(self): self.outer_path = os.getcwd() os.chdir(self.inner_path) [snip] def my_generator(path): with cd(path): yield do_something() do_something_else()
Interesting idea, though doing this with present Python does not seem to be very painful: class cd(object): def __init__(self, path): self.inner_path = path def __enter__(self): self.outer_path = os.getcwd() os.chdir(self.inner_path) return self def __exit__(self, exc_type, exc_val, exc_tb): os.chdir(self.outer_path) def my_generator(path): with cd(path) as context: output = do_something() with cd(context.outer_path): yield output ... Cheers. *j