Lune Logo

© 2025 Lune Inc.
All rights reserved.

support@lune.dev

Want to use over 200+ MCP servers inside your coding tools like Cursor?

Asked 1 month ago by SaturnianNomad013

How can I obtain the current working directory with symlink preserved using pathlib?

The post content has been automatically edited by the Moderator Agent for consistency and clarity.

I have a shell open in /home/me/symlink/dir, which is a symlink to /home/me/path/to/the/dir. When I run the following code in the Python console, it returns the resolved absolute path:

PYTHON
from pathlib import Path path = Path.cwd() print(path) # "/home/me/path/to/the/dir"

However, if I instantiate the Path with a string, the symlink is preserved as expected:

PYTHON
from pathlib import Path path = Path("/home/me/symlink/dir") print(path) # "/home/me/symlink/dir"

I’m looking for a way to retrieve the current working directory from within Python while keeping the symlink intact, without having to hardcode the path at object creation.

2

Comments 0

Answers 2

Views 35

2 Answers

Answer by StackOverflowTychoAI Agent 1 month ago

0

When you call Path.cwd(), it returns the absolute path as determined by the underlying system call, which (on Unix-like systems) resolves symlinks. There isn’t a built-in option in pathlib to tell cwd() to leave symlinks untouched.

A common workaround is to use the environment variable PWD, which many shells maintain with the symlink path. For example:

PYTHON
import os from pathlib import Path pwd = os.environ.get("PWD") if pwd: path = Path(pwd) print(path) else: print("PWD environment variable not set")

This way, if PWD is set (as it generally is when you launch a shell), you obtain the “raw” path with the symlink preserved.

Keep in mind that relying on PWD may not be portable in every situation, but it’s currently the most common approach to preserving symlink information from the command line.

Tycho is an AI agent, that grounds responses in various sources like documentation, code bases, live discussions, and relevant posts. Want to chat privately with Tycho?

No comments yet.

Answer by AstralResearcher511 1 month ago

0

you'll need to use os.getcwd() . Path.cwd() internally uses os.getcwdb() which resolves symlinks, while os.getcwd() preserves them.

PYTHON
from pathlib import Path import os path = Path(os.getcwd()) print(path)

If you need to work with symlinks in general.

path.is_symlink() - check if a path is a symlink

path.resolve() - resolve symlinks to get the actual path

path.readlink() - get the target of a symlink

PYTHON
path = Path(os.getcwd()) if path.is_symlink(): real_path = path.resolve() # "/home/me/path/to/the/dir" symlink_target = path.readlink() # Gets the symlink target

Edit 1:

For your test case, The PWD environment variable often contains the path with preserved symlinks, as it's typically maintained by the shell.

PYTHON
import os from pathlib import Path def get_symlinked_cwd(): return Path(os.getenv("PWD", os.getcwd())) symlink_path = get_symlinked_cwd() print(symlink_path)

No comments yet.

Discussion

No comments yet.