Skip to content

asyncio REPL fails to run with TERM=dumb or PYTHON_BASIC_REPL in 3.13.0b2 #120842

Closed as not planned

Description

@byllyfish

Bug report

Bug description:

Similar bug report: #119102

Linux: Starting asyncio REPL using TERM=dumb:

$ TERM=dumb python -m asyncio
asyncio REPL 3.13.0b2 (main, Jun 13 2024, 04:41:44) [GCC 12.2.0] on linux
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
Exception in thread Interactive thread:
exiting asyncio REPL...
Exception ignored in atexit callback <function register_readline.<locals>.write_history at 0x7f8eed3b93a0>:
Traceback (most recent call last):
  File "<frozen site>", line 538, in write_history
  File "/usr/local/lib/python3.13/_pyrepl/readline.py", line 435, in write_history_file
Traceback (most recent call last):
    history = self.get_reader().get_trimmed_history(maxlength)
  File "/usr/local/lib/python3.13/_pyrepl/readline.py", line 349, in get_reader
  File "/usr/local/lib/python3.13/asyncio/__main__.py", line 117, in run
    raise RuntimeError(err)
RuntimeError: terminal doesn't have the required clear capability
    console = Console(self.f_in, self.f_out, encoding=ENCODING)
  File "/usr/local/lib/python3.13/_pyrepl/unix_console.py", line 172, in __init__

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.13/threading.py", line 1039, in _bootstrap_inner
    self.run()
    ~~~~~~~~^^
  File "/usr/local/lib/python3.13/asyncio/__main__.py", line 119, in run
    console.interact(banner="", exitmsg=exit_message)
                                        ^^^^^^^^^^^^
NameError: name 'exit_message' is not defined
    self._clear = _my_getstr("clear")
  File "/usr/local/lib/python3.13/_pyrepl/unix_console.py", line 165, in _my_getstr
    raise InvalidTerminal(
_pyrepl.unix_console.InvalidTerminal: terminal doesn't have the required clear capability

Linux: Using PYTHON_BASIC_REPL=1:

$ PYTHON_BASIC_REPL=1 python -m asyncio
asyncio REPL 3.13.0b2 (main, Jun 13 2024, 04:41:44) [GCC 12.2.0] on linux
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
Exception in thread Interactive thread:
exiting asyncio REPL...

CPython versions tested on:

3.13

Operating systems tested on:

Linux, macOS

Activity

  1. Zheaoli commented on Jun 21, 2024

    @Zheaoli
    Contributor

    Confirm on main branch and 3.13

    Plz assign this to me, I will dive into this issue. BTW we need asyncio and repl related labels cc @Eclips4

  2. Zheaoli commented on Jul 6, 2024

    @Zheaoli
    Contributor

    @ambv this Bug was introduced into codebase since #119433 and was made by two part

    1. https://github.com/python/cpython/pull/119433/files#diff-7dde21a2106757650c70cf16ab62c5c40a63bec89e420d70ae12782c95e1daa8R119 we should convert exit_message to ''
    2. An InvalidTerminal has been raised in register_readline. Actually I'm not sure which is the graceful way to fix it.
  3. Eclips4 commented on Jul 6, 2024

    @Eclips4
    Member
  4. Zheaoli commented on Jul 6, 2024

    @Zheaoli
    Contributor
    1. https://github.com/python/cpython/pull/119433/files#diff-7dde21a2106757650c70cf16ab62c5c40a63bec89e420d70ae12782c95e1daa8R119 we should convert exit_message to ''

    We already have a PR to fix that: #121341

    Yes but this is only for case1

    asyncio REPL 3.14.0a0 (heads/main:6239d41527, Jul  6 2024, 20:42:50) [GCC 14.1.1 20240522] on linux
    Use "await" directly instead of "asyncio.run()".
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import asyncio
    >>>
    exiting asyncio REPL...
    Exception ignored in atexit callback <function register_readline.<locals>.write_history at 0x7ce232fa9850>:
    Traceback (most recent call last):
      File "/home/manjusaka/Documents/projects/cpython/Lib/site.py", line 537, in write_history
        _pyrepl.readline.write_history_file(history)
      File "/home/manjusaka/Documents/projects/cpython/Lib/_pyrepl/readline.py", line 444, in write_history_file
        history = self.get_reader().get_trimmed_history(maxlength)
      File "/home/manjusaka/Documents/projects/cpython/Lib/_pyrepl/readline.py", line 358, in get_reader
        console = Console(self.f_in, self.f_out, encoding=ENCODING)
      File "/home/manjusaka/Documents/projects/cpython/Lib/_pyrepl/unix_console.py", line 173, in __init__
        self._clear = _my_getstr("clear")
      File "/home/manjusaka/Documents/projects/cpython/Lib/_pyrepl/unix_console.py", line 166, in _my_getstr
        raise InvalidTerminal(
    _pyrepl.unix_console.InvalidTerminal: terminal doesn't have the required clear capability
    

    Here's case2. This exception should not be raised into terminal I guess

  5. kumaraditya303 commented on May 16, 2025

    @kumaraditya303
    Contributor

    I think this is fixed on current main now.

  6. moved this from Todo to Done in asyncioon May 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

topic-asynciotopic-replRelated to the interactive shelltype-bugAn unexpected behavior, bug, or error

Projects

  • Status
    Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions