python / cpython

The Python programming language
https://www.python.org/
Other
60.77k stars 29.34k forks source link

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

Open byllyfish opened 1 week ago

byllyfish commented 1 week ago

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

Zheaoli commented 1 week ago

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