Skip to content

Commit 482a253

Browse files
[3.14] gh-143874: Use self.message instead of raw print in _exec_in_closure() (GH-143875) (#144061)
gh-143874: Use self.message instead of raw print in `_exec_in_closure()` (GH-143875) (cherry picked from commit e66597d) Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com>
1 parent f7567b4 commit 482a253

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

Lib/pdb.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@ def _exec_in_closure(self, source, globals, locals):
877877
locals.update(pdb_eval["write_back"])
878878
eval_result = pdb_eval["result"]
879879
if eval_result is not None:
880-
print(repr(eval_result))
880+
self.message(repr(eval_result))
881881

882882
return True
883883

Lib/test/test_remote_pdb.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,6 +1441,34 @@ def test_multi_line_commands(self):
14411441
self.assertIn("Function returned: 42", stdout)
14421442
self.assertEqual(process.returncode, 0)
14431443

1444+
def test_exec_in_closure_result_uses_pdb_stdout(self):
1445+
"""
1446+
Expression results executed via _exec_in_closure() should be written
1447+
to the debugger output stream (pdb stdout), not to sys.stdout.
1448+
"""
1449+
self._create_script()
1450+
process, client_file = self._connect_and_get_client_file()
1451+
1452+
with kill_on_error(process):
1453+
self._read_until_prompt(client_file)
1454+
1455+
self._send_command(client_file, "(lambda: 123)()")
1456+
messages = self._read_until_prompt(client_file)
1457+
result_msg = "".join(msg.get("message", "") for msg in messages)
1458+
self.assertIn("123", result_msg)
1459+
1460+
self._send_command(client_file, "sum(i for i in (1, 2, 3))")
1461+
messages = self._read_until_prompt(client_file)
1462+
result_msg = "".join(msg.get("message", "") for msg in messages)
1463+
self.assertIn("6", result_msg)
1464+
1465+
self._send_command(client_file, "c")
1466+
stdout, _ = process.communicate(timeout=SHORT_TIMEOUT)
1467+
1468+
self.assertNotIn("\n123\n", stdout)
1469+
self.assertNotIn("\n6\n", stdout)
1470+
self.assertEqual(process.returncode, 0)
1471+
14441472

14451473
def _supports_remote_attaching():
14461474
PROCESS_VM_READV_SUPPORTED = False
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed a bug in :mod:`pdb` where expression results were not sent back to remote client.

0 commit comments

Comments
 (0)