How can I change directory with Python pathlib
In the Python 3.6 or above, os.chdir()
can deal with Path
object directly. In fact, the Path
object can replace most str
paths in standard libraries.
os.chdir(path) Change the current working directory to path.
This function can support specifying a file descriptor. The descriptor must refer to an opened directory, not an open file.
New in version 3.3: Added support for specifying path as a file descriptor on some platforms.
Changed in version 3.6: Accepts a path-like object.
import os
from pathlib import Path
path = Path('/etc')
os.chdir(path)
This may help in the future projects which do not have to be compatible with 3.5 or below.
Based on the comments I realized that pathlib
does not help changing directories and that directory changes should be avoided if possible.
Since I needed to call bash scripts outside of Python from the correct directory, I opted for using a context manager for a cleaner way of changing directories similar to this answer:
import os
import contextlib
from pathlib import Path
@contextlib.contextmanager
def working_directory(path):
"""Changes working directory and returns to previous on exit."""
prev_cwd = Path.cwd()
os.chdir(path)
try:
yield
finally:
os.chdir(prev_cwd)
A good alternative is to use the cwd
parameter of the subprocess.Popen
class as in this answer.
If you are using Python <3.6 and path
is actually a pathlib.Path
, you need str(path)
in the chdir
statements.