mirror of
https://github.com/python/cpython.git
synced 2025-11-05 08:01:58 +00:00
Basic support for pyrepl in Emscripten. Limitations:
* requires JSPI
* no signal handling implemented
As followup work, it would be nice to implement a webworker variant
for when JSPI is not available and proper signal handling.
Because it requires JSPI, it doesn't work in Safari. Firefox requires
setting an experimental flag. All the Chromiums have full support since
May. Until we make it work without JSPI, let's keep the original web_example
around.
(cherry picked from commit c933a6bb32)
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Co-authored-by: Éric <merwok@netwok.org>
34 lines
767 B
Python
34 lines
767 B
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
# types
|
|
if False:
|
|
from typing import IO
|
|
|
|
|
|
trace_file: IO[str] | None = None
|
|
if trace_filename := os.environ.get("PYREPL_TRACE"):
|
|
trace_file = open(trace_filename, "a")
|
|
|
|
|
|
|
|
if sys.platform == "emscripten":
|
|
from posix import _emscripten_log
|
|
|
|
def trace(line: str, *k: object, **kw: object) -> None:
|
|
if "PYREPL_TRACE" not in os.environ:
|
|
return
|
|
if k or kw:
|
|
line = line.format(*k, **kw)
|
|
_emscripten_log(line)
|
|
|
|
else:
|
|
def trace(line: str, *k: object, **kw: object) -> None:
|
|
if trace_file is None:
|
|
return
|
|
if k or kw:
|
|
line = line.format(*k, **kw)
|
|
trace_file.write(line + "\n")
|
|
trace_file.flush()
|