Skip to content

Instantly share code, notes, and snippets.

@angstwad
Last active April 3, 2024 20:42
Show Gist options
  • Save angstwad/f22f91afaa0362b71b5a2df470918d4d to your computer and use it in GitHub Desktop.
Save angstwad/f22f91afaa0362b71b5a2df470918d4d to your computer and use it in GitHub Desktop.
os.chdir, but a context manager
# Copyright 2024 Paul Durivage <pauldurivage+githubspam@gmail.com>
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class Chdir:
def __init__(self, chdir: str | pathlib.Path):
self._pwd = os.getcwd()
self._chdir = chdir
def __enter__(self):
os.chdir(self._chdir)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
os.chdir(self._pwd)
@angstwad
Copy link
Author

angstwad commented Apr 3, 2024

with Chdir('foo/bar'):
    # do stuff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment