Skip to content

gh-161788: Handle path-like commands in shutil.which() - #161789

Open
Builder106 wants to merge 1 commit into
python:mainfrom
SankofaForge:fix/shutil-which-pathlike
Open

Builder106 wants to merge 1 commit into
python:mainfrom
SankofaForge:fix/shutil-which-pathlike

Conversation

@Builder106

@Builder106 Builder106 commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Resolve cmd with os.fspath() before shutil.which() decides whether to use text or bytes paths. This makes bytes-backed path-like commands behave like direct bytes commands and preserves the existing return type.

The regression test runs through the existing text and bytes TestWhich variants.

Tests

All 240 tests passed; 52 platform-specific tests were skipped on Linux ARM64.

Resolve command objects through the path protocol before selecting text or
bytes handling. This preserves the documented bytes return type for
path-like objects backed by bytes.

Ref python#161788

@picnixz picnixz left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we ever actually accepted path-like objects for shutil.which() btw. So this is not an issue and rather a new feature. However, I don't think it's correct to accept pathlike because of the way we treat bytes for now. shutil.which(s: T) returns an object type T and returning a bytes instead of a path of bytes seems also wrong.

@bedevere-app

bedevere-app Bot commented Nov 11, 2026

Copy link
Copy Markdown

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants