https://github.com/python/cpython/commit/c779f2324df06563b4ba3d70d0941e619ccaf5ff
commit: c779f2324df06563b4ba3d70d0941e619ccaf5ff
branch: main
author: Kumar Aditya <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2025-08-28T21:19:15+05:30
summary:
gh-134861: revert "Add CSV and BSV output formats to asyncio ps" (#138187)
This reverts commit ee72c95aa947e5a87308e3657b6b3983805a086e and
470cbe97a528c5f31823a0cd4e283bf02d5d11e7
files:
D Misc/NEWS.d/next/Library/2025-05-29-19-00-37.gh-issue-134861.y2-fu-.rst
M Lib/asyncio/__main__.py
M Lib/asyncio/tools.py
diff --git a/Lib/asyncio/__main__.py b/Lib/asyncio/__main__.py
index 5ef2e1f9efc9ed..ff3a69d1e17297 100644
--- a/Lib/asyncio/__main__.py
+++ b/Lib/asyncio/__main__.py
@@ -1,6 +1,7 @@
import argparse
import ast
import asyncio
+import asyncio.tools
import concurrent.futures
import contextvars
import inspect
@@ -10,9 +11,6 @@
import threading
import types
import warnings
-from asyncio.tools import (TaskTableOutputFormat,
- display_awaited_by_tasks_table,
- display_awaited_by_tasks_tree)
from _colorize import get_theme
from _pyrepl.console import InteractiveColoredConsole
@@ -155,11 +153,6 @@ def interrupt(self) -> None:
"ps", help="Display a table of all pending tasks in a process"
)
ps.add_argument("pid", type=int, help="Process ID to inspect")
- formats = [fmt.value for fmt in TaskTableOutputFormat]
- formats_to_show = [fmt for fmt in formats
- if fmt != TaskTableOutputFormat.bsv.value]
- ps.add_argument("--format", choices=formats, default="table",
- metavar=f"{{{','.join(formats_to_show)}}}")
pstree = subparsers.add_parser(
"pstree", help="Display a tree of all pending tasks in a process"
)
@@ -167,10 +160,10 @@ def interrupt(self) -> None:
args = parser.parse_args()
match args.command:
case "ps":
- display_awaited_by_tasks_table(args.pid, format=args.format)
+ asyncio.tools.display_awaited_by_tasks_table(args.pid)
sys.exit(0)
case "pstree":
- display_awaited_by_tasks_tree(args.pid)
+ asyncio.tools.display_awaited_by_tasks_tree(args.pid)
sys.exit(0)
case None:
pass # continue to the interactive shell
diff --git a/Lib/asyncio/tools.py b/Lib/asyncio/tools.py
index 3887fb8ab5bf52..2683f34cc7113b 100644
--- a/Lib/asyncio/tools.py
+++ b/Lib/asyncio/tools.py
@@ -1,9 +1,8 @@
"""Tools to analyze tasks running in asyncio programs."""
-from collections import defaultdict
-import csv
+from collections import defaultdict, namedtuple
from itertools import count
-from enum import Enum, StrEnum, auto
+from enum import Enum
import sys
from _remote_debugging import RemoteUnwinder, FrameInfo
@@ -233,56 +232,18 @@ def _get_awaited_by_tasks(pid: int) -> list:
sys.exit(1)
-class TaskTableOutputFormat(StrEnum):
- table = auto()
- csv = auto()
- bsv = auto()
- # 🍌SV is not just a format. It's a lifestyle. A philosophy.
- # https://www.youtube.com/watch?v=RrsVi1P6n0w
-
-
-def display_awaited_by_tasks_table(pid, *, format=TaskTableOutputFormat.table):
+def display_awaited_by_tasks_table(pid: int) -> None:
"""Build and print a table of all pending tasks under `pid`."""
tasks = _get_awaited_by_tasks(pid)
table = build_task_table(tasks)
- format = TaskTableOutputFormat(format)
- if format == TaskTableOutputFormat.table:
- _display_awaited_by_tasks_table(table)
- else:
- _display_awaited_by_tasks_csv(table, format=format)
-
-
-_row_header = ('tid', 'task id', 'task name', 'coroutine stack',
- 'awaiter chain', 'awaiter name', 'awaiter id')
-
-
-def _display_awaited_by_tasks_table(table):
- """Print the table in a simple tabular format."""
- print(_fmt_table_row(*_row_header))
- print('-' * 180)
+ # Print the table in a simple tabular format
+ print(
+ f"{'tid':<10} {'task id':<20} {'task name':<20} {'coroutine
stack':<50} {'awaiter chain':<50} {'awaiter name':<15} {'awaiter id':<15}"
+ )
+ print("-" * 180)
for row in table:
- print(_fmt_table_row(*row))
-
-
-def _fmt_table_row(tid, task_id, task_name, coro_stack,
- awaiter_chain, awaiter_name, awaiter_id):
- # Format a single row for the table format
- return (f'{tid:<10} {task_id:<20} {task_name:<20} {coro_stack:<50} '
- f'{awaiter_chain:<50} {awaiter_name:<15} {awaiter_id:<15}')
-
-
-def _display_awaited_by_tasks_csv(table, *, format):
- """Print the table in CSV format"""
- if format == TaskTableOutputFormat.csv:
- delimiter = ','
- elif format == TaskTableOutputFormat.bsv:
- delimiter = '\N{BANANA}'
- else:
- raise ValueError(f"Unknown output format: {format}")
- csv_writer = csv.writer(sys.stdout, delimiter=delimiter)
- csv_writer.writerow(_row_header)
- csv_writer.writerows(table)
+ print(f"{row[0]:<10} {row[1]:<20} {row[2]:<20} {row[3]:<50}
{row[4]:<50} {row[5]:<15} {row[6]:<15}")
def display_awaited_by_tasks_tree(pid: int) -> None:
diff --git
a/Misc/NEWS.d/next/Library/2025-05-29-19-00-37.gh-issue-134861.y2-fu-.rst
b/Misc/NEWS.d/next/Library/2025-05-29-19-00-37.gh-issue-134861.y2-fu-.rst
deleted file mode 100644
index 07e4c61b404ba4..00000000000000
--- a/Misc/NEWS.d/next/Library/2025-05-29-19-00-37.gh-issue-134861.y2-fu-.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add CSV as an output format for :program:`python -m asyncio ps`.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]