![](https://secure.gravatar.com/avatar/2828041405aa313004b6549acf918228.jpg?s=120&d=mm&r=g)
On Sep 15, 2021, at 4:11 AM, Christian Heimes <christian@python.org> wrote:
On 15/09/2021 09.21, Eric V. Smith wrote:
On 9/15/2021 3:02 AM, Christian Heimes wrote: On 15/09/2021 01.55, Guido van Rossum wrote:
I know where I'd file a bug. :-)
"Bug magnet" is an extremely subjective pejorative term. When the *better* way to do things (os.workdir()) is harder than the *easy* way to do (os.chdir()), which is the real bug magnet? The "better way" to handle current working directory is to use the modern *at() variants of syscalls, e.g. openat() instead open(). The variants take an additional file descriptor dirfd that is used as the current working directory for the syscall.
While I generally agree, the only times I've written a context manager like os.workdir() is when running an executable with subprocess.call(), and the executable requires that its current directory be set to some specific directory. So while I don't use this functionality very often, there are times when nothing else will do. I realize I could handle this temporary working directory with yet another executable (including a shell), but using a context manager is just easier, and I only use this in single-threaded programs.
You don't have to change the current working directory of your process in order to run a child process in a different working directory. subprocess.call() and other functions in the subprocess module accept a "cwd" argument that lets you run a process with a different working directory. The "cwd" argument is thread safe.
I learned something today. Thanks! Eric