prevent capteesys from duplicating output when -s disables global capture #13796
+30
−8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Using the
capteesys
fixture with-s
(--capture=no
) printed output twice, even if the fixture wasn’t used in the test body. This issue is tracked in [pytest-dev/pytest#13784](#13784) and is fixed by this PR.Fixes: #13784
Root Cause
capteesys
always instantiated a tee-ingSysCapture
, so when global capture was disabled (-s
), output went directly to the terminal and was also duplicated through the tee path.Fix
Enable tee only when global capture is active. When global capture is disabled,
capteesys
yields a non-teeing fixture to avoid duplication.Changes localized to:
src/_pytest/capture.py
(capteesys
fixture)Tests
Added regression test:
test_capteesys_issue.py
-s
and validates the fix.Behavior Comparison
Before:
Running
pytest -s
withcapteesys
in the test signature duplicatedstdout
/stderr
.After:
pytest -s
prints each line exactly once (no duplication).With capture enabled,
capteesys
continues to tee and capture as expected.Backwards Compatibility
--capture
mode.Affected Files
src/_pytest/capture.py
test_capteesys_issue.py